词边界正则表达式除非内部HTML标签(Word Boundary Regular Expressio

2019-10-18 06:38发布

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

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

...保存的事实,它匹配的HTML标签内的文本(即title="This is blue!" )。 这是一个问题,因为我在做什么文本替换正则表达式匹配,使用这些标题标签则制作提示出现。 所以,你可以想像,它的替代标题中的文本,并打破了提示的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"> (‘蓝’在这种情况下是对我比较反对它的阵列中的任何其它颜色的占位符)。

任何人都可以添加什么,我需要的正则表达式? 或者你有更好的解决办法?

Answer 1:

正则表达式替换往往看似解决,但他们可以有很多的不良副作用,并没有真正完成你想要的。 看看DOM文档模型代替(如一些评论者建议)。

但是,如果你坚持使用正则表达式, 这里是对SO好的帖子。 它使用两道来完成你想要的东西。



Answer 2:

戴维,复活这个问题,因为除了从DOM的解决方案,还有比迄今为止提到的一个更好的正则表达式的解决方案。 这是一个简单的解决方案,需要一个单一的步骤。

一般的解决方法是

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

这里有一个演示

内的任何内容<>标签简单地跳过。 内容标签,如蓝色的匹配,这听起来像它适合你的需求之间。

在表达式中,将“蓝色”为你喜欢什么。

参考

  1. 如何除了在情况S1,S2,S3匹配模式
  2. 如何匹配,除非模式...


文章来源: Word Boundary Regular Expression Unless Inside HTML Tag