【问题标题】:How to highlight search keyword using php preg_replace with parentheses?如何使用带括号的 php preg_replace 突出显示搜索关键字?
【发布时间】:2012-08-06 14:46:00
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 编辑时不要删除您的问题。这让问这个问题毫无用处。
  • 我会按照您的评论行事。谢谢。

标签: php preg-replace


【解决方案1】:

你应该打电话给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 转义正则表达式保留字符来防止这种情况和其他字符。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-08-15
      • 2016-06-16
      • 2012-02-23
      • 1970-01-01
      • 2021-09-19
      • 2014-03-07
      • 1970-01-01
      • 2010-09-16
      • 2010-12-10
      相关资源
      最近更新 更多