给定以下简单函数(对于PHP页面),我正在尝试匹配单词$marker
在长文本字符串中的所有出现。我需要强调它的发生。该功能有效,但它存在两个问题:
1) 它无法匹配$marker
的大写出现
2) 它还匹配部分出现:如果$marker是"art",则函数也匹配"art"answers"1cart"。
我该如何纠正这两个不便之处?
function highlightWords($string, $marker){
$string = str_replace($marker, "<span class='highlight success'>".$marker."</span>", $string);
return $string;
}
要解决这两个问题,可以将preg_replace()
与正则表达式一起使用。只需为不区分大小写的搜索添加i
标志,并在搜索词周围添加'b
单词边界,这样它就不能成为另一个单词的一部分,例如
function highlightWords($string, $marker){
$string = preg_replace("/('b" . preg_quote($marker, "/") . "'b)/i", "<span class='highlight success'>$1</span>", $string);
return $string;
}