突出显示短语或单词问题

发布于 2024-11-17 12:54:52 字数 517 浏览 2 评论 0原文

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; 
} 

上面的代码是我用来突出显示字符串中的短语的代码。我遇到以下问题:

  1. 如果短语是新车,它会在字符串中匹配新车和新车,这意味着它突出显示新车中的新车,但我不需要突出显示新车。

  2. 我可以检查空格,但是如果短语以 ,. 结尾怎么办?或者 !等等。

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:

  1. 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.

  2. I could check for space but what if phrase ends with ,.? or ! etc.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

忆依然 2024-11-24 12:54:52

使用 \b 模式来匹配单词边界,即在您的情况下 /\b(new car)\b/ 将匹配

  • “the new car 是蓝色的”
  • 新车。”
  • 新车”,

但不是

  • “所有新车”。

Use the \b pattern to match word boundaries, i.e. in your case /\b(new car)\b/ will match

  • "the new car is blue"
  • "the new car."
  • "new car"

but not

  • "all the new cars".
月下客 2024-11-24 12:54:52

(?!\w) 添加到正则表达式。这将导致它仅在短语后跟非单词字符 [^a-zA-Z0-9_] 时匹配。

return preg_replace('/('.preg_quote($phrase, '/')(?!\w)')/Ui', '<span class="'.$class.'">'."\\1".'</span>', $str); 

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_].

return preg_replace('/('.preg_quote($phrase, '/')(?!\w)')/Ui', '<span class="'.$class.'">'."\\1".'</span>', $str); 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文