проблема с preg_replace и аналогичными словами в php

Я хочу искать свою строку и заменять некоторые слова ссылкой на какую-то страницу. но у меня проблема с похожими словами типа «Справка» и «Помогите мне». Я хочу связать «Помогите мне», а не «Помощь». это мой код:

$text="Please Help Me Fix This Issue!"; $AllTags=[]; $AllTags[]='Help'; $AllTags[]='Help Me'; $tmp = array(); foreach($AllTags as $term){ $tmp[] = "/($term)/i"; } echo preg_replace($tmp, '<a href="$0">$0</a>', $text); 

Вот динамический подход: сортируйте массив по длине значения в порядке убывания, затем implode с | в шаблон с чередованием, так что более длинные части будут сопоставлены сначала (помните, что первая ветвь слева, которая соответствует, заставит регулярное выражение останавливать анализ альтернатив, см. « Помните, что механизм регулярных выражений является нетерпеливым» ).

использование

 $text="Please Help Me Fix This Issue!"; $AllTags=[]; $AllTags[]='Help'; $AllTags[]='Help Me'; usort($AllTags, function($a, $b) { return strlen($b) - strlen($a); }); echo preg_replace('~' . implode('|', $AllTags) . '~', '<a href="$0">$0</a>', $text); 

См. Демо-версию PHP .

Регулярное выражение будет выглядеть как ~Help Me|Help~ . Возможно, вы захотите добавить границы слов ( \b ) ( см. Демонстрацию ) или образы, подобные (?<!\S) и (?!\S) ( см. Демонстрацию ), чтобы соответствовать только целым словам позже.