我想搜索我的字符串并通过链接替换某些单词。 但我对类似的词有问题,例如"帮助"和#34;帮助我"。 我想链接"帮助我"不是"帮助"。 这是我的代码:
$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);
答案 0 :(得分:2)
以下是动态方法:按降序排列数值长度,然后将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="$0">$0</a>', $text);
请参阅PHP demo。
正则表达式看起来像~Help Me|Help~
。您可能希望添加字边界(\b
)(see demo)或类似(?<!\S)
和(?!\S)
(see demo)等内容,以便稍后匹配整个字词。< / p>