Preg_replace模式问题

时间:2014-06-10 12:43:36

标签: php preg-replace

我正在尝试突出$ vQuery中的确切术语,如果$ vQuery是单词的一部分,它现在将突出显示整个单词。我不能使用str_replace或str_ireplace,因为需要显示的内容与替换内容之间存在大小写问题,因此我使用preg_replace留下了一个过于复杂的语句。

 preg_replace("/\b".$vQuery."\b/i", "<span class=\"highlightedTerm\">$0</span>", $vName);

上述声明会按照预期进行匹配,但我会搜索car它会突出显示所有字词car,但它也会突出显示包含car的任何内容。

是否有一种简单的方法可以修改模式以使其完全匹配?!

修改

说我有:

 This is the carpet in my car.

我希望输出如下:

 This is the <span class="highlightedTerm">car</div>pet in my <span class="highlightedTerm">car</div>.

目前,我得到的是:

 This is the <span class="highlightedTerm">carpet</div> in my <span class="highlightedTerm">car</div>.

希望更清楚。

3 个答案:

答案 0 :(得分:0)

在学期结束时和开头添加空格。这样你只能抓住&#39;汽车&#39;而不是卡通&#39;。这是你在找什么?

答案 1 :(得分:0)

奇怪,因为单词边界应该已经完成​​了这个技巧..即

/\bHello\b/

您也可以尝试在开头没有单词边界,因为字符串可能只有一个单词。

/Hello\b/

您还可以使搜索不区分大小写

/\bHello\b/i

如果导致问题的单词中有特殊字符,您可以将它们显示为utf-8以防万一

/\bHello\b/u

或以上所有

/Hello\b/iu

答案 2 :(得分:0)

在@jurgemaister的帮助下,我能够弄清楚它是否适合我的情况。

 preg_replace("/".$this->mQuery."/i", "<span class=\"highlightedTerm\">$0</span>", $vName);