Помогите составить регулярное выражение

SN
На сайте с 04.07.2013
Offline
84
936

Есть такая строка:

$string = "Голосовой работает на базе <a href=\"/link.html\">технологии помощник нейронных</a> сетей помощник, голосовой помощник работает".

В строке трижды встречается слово "помощник".

Мне нужно заменить в строке $string первое вхождение слова "помощник", но только в том случае, если оно не находится внутри тегов <a href="...> </a>. Т.е. в данном случае замене подлежит слово "помощник" после слова "сетей".

"помощник" нужно заменить на строку вида: <a href="/помощник.html">помощник</a>.

Задача выглядит очень простой, но составить регулярку оказалось мне не подсилу.

Пожалуйста помогите.

Пробовал так:

preg_replace("/помощник[W]?.*(?!(?<!(<a\s+.*(?!</a>)))</a>)/", "<a href=\"$1.html\">$1</a>, $string);

Спасибо

Mykhailov
На сайте с 30.11.2011
Offline
63
#1
Продам нервную систему в хорошем состоянии - заводится с пол оборота.
J
На сайте с 20.02.2014
Offline
120
jkm
#2
SN
На сайте с 04.07.2013
Offline
84
#3

Огромное спасибо! Отлично работает!

Подскажите пожалуйста, как доработать эту функцию:

дело в том что если строка имеет вид:

$string = "Голосовой работает на базе технологии <a href=\"/помощник.html\">помощник</a> нейронных сетей помощник, голосовой помощник работает".

то после обработки она:

Голосовой работает на базе технологии <a href="/помощник.html">помощник</a> нейронных сетей <a href="/помощник.html">помощник</a>, голосовой помощник работает.

Т.е. на слово помощник 2 ссылки.

Мне нужно чтобы регулярка проверяла, что между тегами <a></a> "помощник" не единственное слово и если слово в тегах единственное, то замена не производится совсем! Чтобы не было одинаковых ссылок на странице..

С П А С И Б О

A
На сайте с 19.07.2010
Offline
130
#4

желательно еще проверять границы слова, а то некрасиво может получиться:

"сетей помощников," - сетей <a href="/помощник.html">помощник</a>ов,

немного поправил:

$text = preg_replace('#\s?(<a\b.+?</a>(*SKIP)(*F)|помощник)\b#su', '<a href="/$1.html">$1</a>', $text, 1);
SeoNk:
Мне нужно чтобы регулярка проверяла, что между тегами <a></a> "помощник" не единственное слово и если слово в тегах единственное, то замена не производится совсем! Чтобы не было одинаковых ссылок на странице..

сначала проверяйте, что нет ссылок, а потом если нужно проводите замену.

.............

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий