我已经重新格式化了这个问题,由于误解,这对我和这个问题产生了不适感,而不是故意的,我为此道歉。
我有一系列单词用于突出显示字符串中的单词,但有些单词可能会显示为短语的一部分,所以我希望这句话能够占据主要亮点:
例如:
// Array
$seo = array("apple, apple tree, orchard");
// String
$description = "In my orchard I have a large Apple Tree";
// Desired effect:
In my <strong>orchard</strong> I have a large <strong>Apple Tree</strong>
在我自己的第一次尝试中,我循环遍历对阵字符串运行preg_replace的数组,但我得到了嵌套的高亮显示,如<strong><strong>Apple</strong> Tree</strong>
非常感谢您的协助
斯图
答案 0 :(得分:1)
首先,您不应该使用循环来单独替换每个单词,而应使用正则表达式替代列表(foo|bar|thingy)
。
$rx_words = implode("|", array_map("preg_quote", $words));
$text = preg_replace("/\b($rx_words)\b/i",
(实际上preg_quote错过了第二个参数,但只要你没有在关键字中使用正斜杠,它就会起作用。)
然后你也可以通过断言让它更安全:
$text = preg_replace("/(?<!<strong>)\b($rx_words)\b/i",
因此它将忽略已经包装的单词。这只是一种解决方法,但通常已经足够了。