突出显示短语或单词问题
function highlight_phrase($str, $phrase, $class='highlight')
{
if ($str == '')
{
return '';
}
if ($phrase != '')
{
return preg_replace('/('.preg_quote($phrase, '/').')/Ui', '<span class="'.$class.'">'."\\1".'</span>', $str);
}
return $str;
}
上面的代码是我用来突出显示字符串中的短语的代码。我遇到以下问题:
如果短语是新车,它会在字符串中匹配新车和新车,这意味着它突出显示新车中的新车,但我不需要突出显示新车。
我可以检查空格,但是如果短语以 ,. 结尾怎么办?或者 !等等。
function highlight_phrase($str, $phrase, $class='highlight')
{
if ($str == '')
{
return '';
}
if ($phrase != '')
{
return preg_replace('/('.preg_quote($phrase, '/').')/Ui', '<span class="'.$class.'">'."\\1".'</span>', $str);
}
return $str;
}
above code is what i use to highlight phrases in a string. I have problem with following issues:
if phrase is new car it matches new car and new cars both in a string meaning it highlights new car of new cars but i need not highlight new cars.
I could check for space but what if phrase ends with ,.? or ! etc.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用
\b
模式来匹配单词边界,即在您的情况下/\b(new car)\b/
将匹配但不是
Use the
\b
pattern to match word boundaries, i.e. in your case/\b(new car)\b/
will matchbut not
将
(?!\w)
添加到正则表达式。这将导致它仅在短语后跟非单词字符[^a-zA-Z0-9_]
时匹配。Add
(?!\w)
to the regex. This will cause it to only match when the phrase is followed by a non-word character[^a-zA-Z0-9_]
.