如何使用带有括号的php preg_replace突出显示搜索关键字?

时间:2012-08-06 14:46:00

标签: php preg-replace

我想在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)";

它不会返回替换的背景和文本颜色。

我认为它坚持使用括号字符串()

问题是如何突出显示所有匹配的文字关键字而没有问题括号字符串()

请分享您的想法。谢谢:))

2 个答案:

答案 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

http://php.net/manual/en/function.preg-quote.php