【问题标题】:PHP using preg_replace to highlight string that is part of a wordPHP 使用 preg_replace 突出显示作为单词一部分的字符串
【发布时间】:2017-09-14 00:02:41
【问题描述】:

所以我有以下代码突出显示在搜索结果中输入到搜索栏中的单词:

$sk = explode(" ",$searchVal); 
    foreach ($searchPostResults as $pagePosts)
        echo '<li><span class="searchResult"><a href="' 
        . get_the_permalink($pagePosts->ID) . '" title="">' . 
        preg_replace('/\b(' . implode('|', $sk) . ')\b/iu', 
                     '<strong class="searchHighlight">\0</strong>', 
                     get_the_title($pagePosts->ID)) 
         . '</a></span></li>';

现在它在大多数情况下都有效。 假设我在搜索栏中输入搜索词“如何”,“如何”一词突出显示。 现在,如果“如何”这个词在另一个词(如“淋浴”)中,我想强调一下“如何”这样:

s<strong class="searchHighlight">how</strong>er

任何人都知道我可以如何调整代码来做到这一点。

干杯

【问题讨论】:

  • @chris85 谢谢你成功了,没有意识到 \b 是边界。将来需要牢记这一点。谢谢冠军:)

标签: php arrays regex preg-replace word-boundary


【解决方案1】:

您所描述的行为与大多数人的意图相反,这可能是您的正则表达式中包含\b 的原因。 \bword boundary 并使其只能进行完整的单词匹配。删除\bs,它应该可以工作。您也不需要捕获组。

preg_replace('/' . implode('|', $sk) . '/iu',

【讨论】:

  • 你很快就会加入新俱乐部,克里斯 ;-) 顺便说一句,答案很好。
  • Wwwwwwwwwwwink!
  • @Fred-ii- 谢谢,这里很好。
  • 欢迎克里斯。在他们加入“20k 俱乐部”之前,您将看到您现在可以做其他人做不到的事情,干杯! 并恭喜;你应得的。你给出了很好的、解释清楚的答案并提供了很多帮助:)
猜你喜欢
  • 2012-09-09
  • 2021-06-14
  • 2013-06-29
  • 1970-01-01
  • 2011-04-07
  • 2018-12-12
  • 2013-07-31
  • 2021-09-19
  • 2017-08-29
相关资源
最近更新 更多