我想在php中使用preg_replace突出显示我的关键字搜索文本,但问题是它不适用于括号字符串(
和)
我的功能看起来像这样......
$text_oritinal = "25 Hours: Colour In White (CD)";
function highlight($text_search, $text_original) {
$str = preg_replace('#'. $text_search .'#i', '<span style="background-color:#FFFF66; color:#FF0000;">\\0</span>', $text_original);
return $str;
}
完整原始文字为"25 Hours: Colour In White (CD)"
例如。如果我使用关键字
$text_search = "25 Hours: Colour In White";
它返回带有高亮背景和文字颜色的好替换关键字。
<span style="background-color:#FFFF66; color:#FF0000;">25 Hours: Colour In White</span> (CD)
但!如果我使用此关键字包括括号字符串(
和)
$text_search = "25 Hours: Colour In White (CD)";
它不会返回替换的背景和文本颜色。
我认为它坚持使用括号字符串(
和)
问题是如何突出显示所有匹配的文字关键字而没有问题括号字符串(
和)
?
请分享您的想法。谢谢:))
答案 0 :(得分:3)
您应该致电preg_quote
:
function highlight($text_highlight, $text_search) {
$str = preg_replace('#'. preg_quote($text_highlight) .'#i', '<span style="background-color:#FFFF66; color:#FF0000;">\\0</span>', $text_search);
return $str;
}
说明:
括号用于创建submatches
。在搜索字符串中使用它们会导致意外结果,因为它们是保留字符。您可以使用转义正则表达式保留字符的preg_quote
来阻止此字符和其他字符。
答案 1 :(得分:0)
将您放入正则表达式的文本换行到preg_quote