Word边界正则表达式,除非在HTML标记内

时间:2013-06-17 06:13:11

标签: php html regex recursion word-boundary

我有一个使用单词边界的正则表达式,效果非常好......

~\b('.$value.')\b~i

...除了匹配HTML标记内的文本(即 title="This is blue!" )这一事实。这是一个问题,因为我正在对正则表达式匹配的任何内容进行文本替换,然后使用 title 标记显示工具提示。所以,正如你可以想象的那样,它取代了标题中的文本并打破了工具提示的HTML。例如,应该是什么:

<span class="blue" title="This is blue!">Aqua</span>

...最终成为......

<span class="blue" title="This is <span class=" blue"="">Royal Blue</span>"&gt;Aqua</span>

我对strip_tags的使用没有解决问题;我认为我需要的是一个更好的正则表达式,它根本不匹配以 blue"> 结尾的内容(在这种情况下,'blue'是我正在比较的数组中任何其他颜色的占位符反对)。

任何人都可以将我需要的东西附加到正则表达式中吗?或者你有更好的解决方案吗?

2 个答案:

答案 0 :(得分:3)

Davey,重新提出这个问题,因为除了Dom解决方案之外,还有一个比目前提到的更好的正则表达式解决方案。这是一个简单的解决方案,需要一步。

一般解决方案是

<[^>]*>(*SKIP)(*F)|blue

这是demo

简单地跳过<>个代码中的所有内容。 标签之间的内容(例如蓝色)匹配,这听起来像是符合您的需求。

在表达式中,将“blue”替换为您喜欢的内容。

参考

  1. How to match pattern except in situations s1, s2, s3
  2. How to match a pattern unless...

答案 1 :(得分:1)

正则表达式取代通常看起来像解决方案,但它们可能有很多不良副作用,并没有真正实现你想要的。查看DOMDocument模型(正如一些评论者建议的那样)。

但如果你坚持使用正则表达式,那么here's就是一个很好的帖子。它使用两遍来完成你想要的。