[英]Match array words against string
由于误解,我已经重新格式化了这个问题,这对我和问题产生了不适感,不是故意的,对此我表示歉意。
我有一个单词数组,用于突出显示字符串中的单词,但是某些单词可能会作为短语的一部分出现,因此我希望该短语在突出显示部分中占上风:
例如:
// 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>
在此先感谢您的协助
斯图
首先,您不应该使用循环来单独替换每个单词,而应使用正则表达式替代列表(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",
因此它将忽略已经包装的单词。 这只是一个解决方法,但通常就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.