PHP使用preg_replace突出显示作为单词一部分的字符串

时间:2017-09-14 00:02:41

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

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

$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>';

现在它在大多数情况下都有效。 让我们说我输入搜索词&#34;如何&#34;在搜索栏中,单词如何突出显示。 现在,如果在淋浴等另一个词里面的话怎么样,我想强调一下如何:

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

任何人都知道如何调整代码来执行此操作。

干杯

1 个答案:

答案 0 :(得分:4)

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

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