使用preg搜索字符串IN字符串

时间:2010-02-10 20:18:58

标签: php

如果有人按“ender”搜索并且该项目的标题是“Henderson”,则此函数应返回:

H<span class="mark">ender</span>son

当我打电话给mark_match(“亨德森”,“恩德”)时不知怎的,它不起作用;

有什么想法吗?这是获取原始项目标题并将其与搜索字符串进行比较的函数:

function mark_match($txt,$s) {
 # Remove unwanted data
 $txt = strip_tags($txt);
 # Remove innecesary spaces
 $txt = preg_replace('/\s+/',' ', $txt);
 # Mark keywords
 $replace = '<span class="mark">\\1</span>';
 foreach($s as $sitem) {
  $pattern = '/('.trim($sitem).')/i';
  $txt = preg_replace($pattern,$replace,$txt); 
 }
 return $txt;
}

1 个答案:

答案 0 :(得分:5)

为何使用正则表达式,何时可以使用str_replace()

$term = 'ender';
$span = '<span class="mark">' . $term . '</span>';
$marked = str_replace($term, $span, 'Henderson');
echo $marked; // outputs H<span class="mark">ender</span>son

常规字符串函数通常是正则表达式的更快替代方法,尤其是当您要查找的字符串不是模式,而只是一个子字符串时。

Regex版本看起来像这样:

$term = 'eNdEr';
$span = '<span class="mark">$0</span>';
$marked = preg_replace("/$term/i", $span, 'Henderson');
echo $marked; // outputs H<span class="mark">ender</span>son