如何用 php 匹配标记字符串中的几个关键字
How match and mark several keywords in string with php
这是我当前的代码:
# highlight keywords in string
function highlight($string, $keyword) {
return preg_replace("/".preg_quote($keyword)."/ui", "<span class=\"h\">[=11=]</span>", $string);
}
如果我执行这段代码:
$string = "The house is very big.";
echo highlight($string, "hous");
会return:
The <span class="h">hous</span>e is very big.
现在我尝试将几个关键字作为数组发送到函数的第二个参数,所有这些匹配项都应该突出显示。示例:
echo highlight($string, array("hous", "big");
...应该 return:
The <span class="h">hous</span>e is very <span class="h">big</span>.
有什么想法吗?谢谢。
检查 $keywords
是否包含值数组而不是 string
类型:
function highlight($string, $keywords) {
$keywords = is_array($keywords)
? implode('|', array_map('preg_quote', $keywords))
: preg_quote($keywords);
return preg_replace("/$keywords/ui", "<span class=\"h\">[=10=]</span>", $string);
}
您可以简单地这样做:
function highlight($string, $keywords) {
return preg_replace("/".implode('|', $keywords)."/ui", "<span class=\"h\">[=10=]</span>", $string);
}
$string = "The house is very big.";
echo highlight($string, ["hous", "big"]);
注意:implode('|', $keywords)
因为 |
管道符号可以让你有这样的灵活性。
有关更多信息,请参阅:http://www.regular-expressions.info/alternation.html
这是我当前的代码:
# highlight keywords in string
function highlight($string, $keyword) {
return preg_replace("/".preg_quote($keyword)."/ui", "<span class=\"h\">[=11=]</span>", $string);
}
如果我执行这段代码:
$string = "The house is very big.";
echo highlight($string, "hous");
会return:
The <span class="h">hous</span>e is very big.
现在我尝试将几个关键字作为数组发送到函数的第二个参数,所有这些匹配项都应该突出显示。示例:
echo highlight($string, array("hous", "big");
...应该 return:
The <span class="h">hous</span>e is very <span class="h">big</span>.
有什么想法吗?谢谢。
检查 $keywords
是否包含值数组而不是 string
类型:
function highlight($string, $keywords) {
$keywords = is_array($keywords)
? implode('|', array_map('preg_quote', $keywords))
: preg_quote($keywords);
return preg_replace("/$keywords/ui", "<span class=\"h\">[=10=]</span>", $string);
}
您可以简单地这样做:
function highlight($string, $keywords) {
return preg_replace("/".implode('|', $keywords)."/ui", "<span class=\"h\">[=10=]</span>", $string);
}
$string = "The house is very big.";
echo highlight($string, ["hous", "big"]);
注意:implode('|', $keywords)
因为 |
管道符号可以让你有这样的灵活性。
有关更多信息,请参阅:http://www.regular-expressions.info/alternation.html