我创建了一个突出显示字符串中单个单词的函数。它看起来像这样:
function highlight($input, $keywords) {
preg_match_all('~[\w\'"-]+~', $keywords, $match);
if(!$match) { return $input; }
$result = '~\\b(' . implode('|', $match[0]) . ')\\b~i';
return preg_replace($result, '<strong>$0</strong>', $input);
}
我需要该函数来处理一系列支持搜索中空格的不同单词。
例子:
$search = array("this needs", "here", "can high-light the text");
$string = "This needs to be in here so that the search variable can high-light the text";
echo highlight($string, $search);
到目前为止,这是我要修改的功能以按照我的需要工作:
function highlight($input, $keywords) {
foreach($keywords as $keyword) {
preg_match_all('~[\w\'"-]+~', $keyword, $match);
if(!$match) { return $input; }
$result = '~\\b(' . implode('|', $match[0]) . ')\\b~i';
$output .= preg_replace($result, '<strong>$0</strong>', $keyword);
}
return $output;
}
显然这不起作用,我不确定如何使它起作用(正则表达式不是我的强项)。
还有一点可能是个问题,函数如何处理多重匹配?比如$search = array("in here", "here so");
结果会是这样的:
This needs to be <strong>in <strong>here</strong> so</strong> that the search variable can high-light the text
但这需要是:
This needs to be <strong>in here so</strong> that the search variable can high-light the text