Case(in)sensitive为搜索结果替换str_ireplace

时间:2015-04-26 19:37:18

标签: php replace preg-replace

我有一个项目列表。我想在搜索术语中使用它们。说清单是:

  • 你好,世界!
  • 世界还不够
  • 80天内环游世界。
  • WORLDS的战争

现在,如果我正在搜索关键字world(请注意所有字母均为小写字母),我将提供此功能。

preg_replace(/world/, '<span class="label label-search-results">$0</span>', $item);

$item是每一行,输出为:

  

警告: preg_replace() [function.preg-replace]:分隔符不得为第XX行 /myfile.php 中的字母数字或反斜杠。

如果我使用str_ireplace(),我不知道找到的文本的原始情况。它会是这样的:

str_ireplace("world", '<span class="label label-search-results">world</span>', $item);

这导致所有worldWorldWORLD都是小写的。关于如何在替换后保留案例的任何想法?

2 个答案:

答案 0 :(得分:1)

这是preg_replace_callback()的完美用例,只需像这样使用它:

echo preg_replace_callback("/" . preg_quote($_GET["q"], "/")  . "/i", function($m){
    return "<span class='label label-search-results'>" . $m[0] . "</span>";
}, $item);

答案 1 :(得分:0)

preg_replace('/(world)/i', '<span class="label label-search-results">$1</span>', $item);

尝试使用标记i以防止不区分大小写。