对字符串匹配数组的话(Match array words against string)

2019-10-16 13:50发布

我已经重新格式化了这个问题,因为一个误会,这产生恶感朝我和问题,并不是有意而为它我appologise。

我有我使用突出一个字符串单词的数组,有些话却可能显示为一个短语的一部分,所以我想这句话采取遵的亮点:

例如:

// 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>

提前感谢您的帮助

斯图

Answer 1:

首先,你不应该使用一个循环来代替每个单独的词,但正则表达式的选择列表(foo|bar|thingy)

  $rx_words = implode("|", array_map("preg_quote", $words));
  $text = preg_replace("/\b($rx_words)\b/i", 

(其实这preg_quote错过第二PARAM,但只要你没有正斜杠中的关键字,它会工作。)

然后,你还可以使它与断言更安全:

  $text = preg_replace("/(?<!<strong>)\b($rx_words)\b/i",

所以它会忽略那些已经包裹的话。 这只是一个解决办法,但往往不够。



文章来源: Match array words against string