如何使用带括号的phppreg_replace突出显示搜索关键字


How to highlight search keyword using php preg_replace with parentheses?

我想在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