匹配数组字对字符串

时间:2011-12-11 20:04:10

标签: php arrays preg-replace

我已经重新格式化了这个问题,由于误解,这对我和这个问题产生了不适感,而不是故意的,我为此道歉。

我有一系列单词用于突出显示字符串中的单词,但有些单词可能会显示为短语的一部分,所以我希望这句话能够占据主要亮点:

例如:

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

非常感谢您的协助

斯图

1 个答案:

答案 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",

因此它将忽略已经包装的单词。这只是一种解决方法,但通常已经足够了。