2013-07-03 2 views
0

Я ищу, чтобы создать PHP Regex скрипт, который может соответствовать и заменить слова в строке.PHP: Regex заменить слово с помощью подстановочных знаков в Lookbehind Assertions

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

/\b(SEARCH_TERM)\b/ 

Проблемы я имею что некоторые из строк содержат HTML элементов, такие как < через > тегов и <IMG> теги, где HREF и ГКЗ атрибуты могут иногда содержат в заменяющем слово в их пути. Если это слово заменено в этих элементах, ссылка или изображение больше не будут работать.

Пример заменить слово «тест» с «SEARCH_TERM» В следующем примере строка:

my test string <a href="http://www.google.com?q=my+test+string">link</a> 

бы вернуть:

my SEARCH_TERM string <a href="http://www.google.com?q=my+SEARCH_TERM+string">link</a> 

В то время как мне это нужно игнорировать HREF текст атрибута и return:

my SEARCH_TERM string <a href="http://www.google.com?q=my+test+string">link</a> 

Я рассмотрел использование утверждений Regex's Lookbehind (как только bel ow), но подстановочные знаки переменной длины недопустимы.

/(?<!(href|src)=.*)\b(SEARCH_TERM)\b/ 

Примечание: Мне нужно сделать это с помощью регулярного выражения, а не анализатора DOM.

+0

Используйте [HTML парсер] (http://stackoverflow.com/questions/3577641/parsing-and-processing-html- xml) .. не использовать regex..Believe me, его более простой для анализа html с помощью синтаксического анализатора, чем с помощью регулярного выражения. – Anirudha

+0

Как уже упоминалось внизу, мне нужно сделать это с помощью Regex. – ticallian

+0

все лучшее тогда.: P – Anirudha

ответ

2

Как я уже говорил, вам необходимо использовать html parser.

Но если вы хотите

/\btest\b(?=[^>]*(<|$))/s 

Выше регулярное выражение будет соответствовать только если есть < или end of string (не линия) впереди где-то без согласования >


ПРИМЕЧАНИЕ

Этот не будет работать, если в вашем тексте содержится >.

Например

hello>world 

Следовательно, причина, вы должны использовать анализатор

+0

Это отлично работает, большое спасибо! – ticallian

+0

'REPLACE другой текст.' –

+0

@MadaraUchiha это будет другой хорошей техникой, если размер html невелик. – Anirudha