1

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

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

我认为它卡在括号字符串()

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

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

4

2 回答 2

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您可以通过使用which 转义正则表达式保留字符来防止此字符和其他字符。

于 2012-08-06T14:50:12.897 回答
0

将您放入正则表达式中的文本包装在 preg_quote 中

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

于 2012-08-06T14:49:56.797 回答