2017-09-14 106 views
1

所以我有以下的代码,突出了字/秒这是在搜索结果输入到搜索栏:PHP中使用的preg_replace突出字符串是单词的一部分

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

现在,它的工作原理为大部分。 可以说,我在搜索栏中输入搜索词“how to”,突出显示单词how。 现在,如果这个词是怎么样的淋浴另一个词里面,我想强调如何像这样:

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

有谁知道我可能会调整代码来做到这一点。

干杯

+0

@ chris85谢谢你做了诡计,没有意识到\ b是边界。将来需要牢记这一点。感谢冠军:) –

回答

4

您所描述的行为是大多数人的意图相反,并可能就是你的正则表达式中有该\b\b是一个word boundary并使它,所以你可以只有完整的单词匹配。删除\b s它应该工作。你也不需要捕获组。

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

你很快就会加入新的俱乐部克里斯;-)很好解释答案btw。 –

+1

* Wwwwwwwwwwwink!* –

+1

@ Fred-ii-谢谢,这里很好。 – chris85

相关问题