我想在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)";
它不会返回替换的背景和文本颜色。
我认为它被括号字符串(
和)
卡住了
问题是如何使用括号字符串(
和)
突出显示所有匹配的文本关键字而不会出现任何问题?
请分享你的想法。感谢:)
您应该调用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
来转义regex保留字符来防止这种情况和其他字符。
在preg_quote 中将放入regex的文本换行
http://php.net/manual/en/function.preg-quote.php