如果有人按“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;
}
答案 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