如何用 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);
}

PHP live demo

您可以简单地这样做:

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