1

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

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

title="This is blue!"...除了它与 HTML 标记(即)内的文本相匹配的事实。这是一个问题,因为我正在对正则表达式匹配的任何内容进行文本替换,然后使用这些标题标签显示工具提示。因此,正如您可以想象的那样,它替换了标题中的文本并破坏了工具提示的 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">(在这种情况下,“蓝色”是我要与之比较的数组中任何其他颜色的占位符)。

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

4

2 回答 2

3

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

一般的解决方案是

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

这是一个演示

<>标签内的任何内容都被简单地跳过。标签之间的内容,例如蓝色是匹配的,听起来很符合您的需求。

在表达式中,将“蓝色”替换为您喜欢的。

参考

  1. 除了情况 s1、s2、s3 之外,如何匹配模式
  2. 如何匹配模式,除非...
于 2014-05-12T02:09:09.027 回答
1

正则表达式替换通常看起来像是解决方案,但它们可能会产生很多不良副作用,并且不能真正实现您想要的。改为查看 DOMDocument 模型(正如一些评论者所建议的那样)。

但是如果你坚持使用正则表达式,这里有一篇关于 SO 的好帖子。它使用两次通过来完成您想要的。

于 2013-10-28T20:57:07.463 回答