preg_replace 和 php 中的相似词有问题
having issue with preg_replace and similar words in php
我想搜索我的字符串并用 link 替换一些单词到某个页面。
但我对类似 "Help" 和 "Help Me" 这样的词有疑问。
我想要 link "Help Me" 而不是 "Help"。
这是我的代码:
$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="[=12=]">[=12=]</a>', $text);
这是动态方法:按值长度降序排列数组,然后 implode
和 |
进入基于交替的模式,以便首先匹配较长的部分(记住从左边开始匹配的第一个分支使正则表达式停止分析备选方案,请参阅 Remember That The Regex Engine Is Eager)。
使用
$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="[=10=]">[=10=]</a>', $text);
参见PHP demo。
正则表达式看起来像 ~Help Me|Help~
. You might want to add word boundaries (\b
) (see demo) or lookarounds like (?<!\S)
and (?!\S)
(see demo) 以后只匹配整个单词。
我想搜索我的字符串并用 link 替换一些单词到某个页面。 但我对类似 "Help" 和 "Help Me" 这样的词有疑问。 我想要 link "Help Me" 而不是 "Help"。 这是我的代码:
$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="[=12=]">[=12=]</a>', $text);
这是动态方法:按值长度降序排列数组,然后 implode
和 |
进入基于交替的模式,以便首先匹配较长的部分(记住从左边开始匹配的第一个分支使正则表达式停止分析备选方案,请参阅 Remember That The Regex Engine Is Eager)。
使用
$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="[=10=]">[=10=]</a>', $text);
参见PHP demo。
正则表达式看起来像 ~Help Me|Help~
. You might want to add word boundaries (\b
) (see demo) or lookarounds like (?<!\S)
and (?!\S)
(see demo) 以后只匹配整个单词。