将子字符串包裹在 标签中,而无需在替换时创建嵌套标签

2024-01-20

我有一个单词数组,用于突出显示字符串中的单词,但是有些单词可能会作为短语的一部分出现,因此我希望该短语优先于突出显示中的单个单词:

例如:

$seo = ['apple', 'apple tree', 'orchard'];

$description = "In my orchard I have a large Apple Tree";

期望的效果:

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

所以它会忽略已经包装的单词。这只是一种解决方法,但通常就足够了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将子字符串包裹在 标签中,而无需在替换时创建嵌套标签 的相关文章

随机推荐

Powered by Hwhale