Помогите с preg_replace

12
V3
На сайте с 08.09.2015
Offline
54
#11
jkm:
Ну раз \b не работает с кириллицей в UTF-8, то можно попробовать через cвойства unicode-символов.

Спасибо, работает. Ещё один вопрос тогда. Возможно ли этими свойствами исключить слова, обёрнутые в теги, например, <h2>?

Посмотрел, что > и < относятся к математическим символам, добавил в код p{Sm}, но не работает правильно.

$text = preg_replace('/(?<!\p{L}\p{Sm})'.preg_quote($value['faq_menu'], '/').'(?!\p{L}\p{Sm})/ui', '<a href="/faq/'.$value['faq_url'].'/">'.$value['faq_menu'].'</a>', $text);

В принципе, можно убрать i, тогда не будут искать слова с заглавной буквы как в h2, я пока так и с делал, но хотелось бы без таких исключений, нужное слово может ведь быть и в начале предложения.

J
На сайте с 20.02.2014
Offline
120
jkm
#12

Если простой случай, когда между словом и тегом нет пробелов и других слов <h2>слово</h2>


$text = preg_replace('/(?<!\p{L}|<h2>)'.preg_quote($value['faq_menu'], '/').'(?!\p{L}|<\/h2>)/ui', '<a href="/faq/'.$value['faq_url'].'/">\0</a>', $text);

Если посложнее <h2>лала слово блабла</h2>

/\G(?:<h2>.*?<\/h2>|\Kслово(*ACCEPT)|.)++(?!)/uis https://regex101.com/r/mE1aV1/1


$text = preg_replace('/\G(?:<h2>.*?<\/h2>|\K(?<!\p{L})'.preg_quote($value['faq_menu'], '/').'(?!\p{L})(*ACCEPT)|.)++(?!)/uis', '<a href="/faq/'.$value['faq_url'].'/">\0</a>', $text);
V3
На сайте с 08.09.2015
Offline
54
#13

Второй вариант ничего не находит, впрочем, мне отлично подходит первый. Спасибо ещё раз.

12

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