preg_replace UNLESS字符串存在

时间:2013-02-09 22:37:57

标签: php regex

我正在尝试将CS​​S样式添加到所有超链接,除非它具有“donttouch”属性。

E.g。

  • 样式:<a href="http://whatever.com">style me</a>
  • 请勿设置此样式:<a href="http://whatever.com" donttouch>don't style me</a>

这是我的preg_replace没有“donttouch”排除,这工作正常。

preg_replace('/<a(.*?)href="([^"]*)"(.*?)>(.*?)<\/a>/','<a$1href="$2"$3><span style="color:%link_color%; text-decoration:underline;">$4</span></a>', $this->html)

我到处寻找,并感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

查找(也适用于Notepad ++)

(?s)(<a (?:(?!donttouch)[^>])+>)(.*?)</a>

替换为(在Notepad ++中全部替换):

\1<span style="whatever">\2</span></a>

答案 1 :(得分:0)

这可以在没有正则表达式的情况下完成。相反,请使用CSS属性选择器。

例如,使用以下规则:

a { font-weight: bold; color: green }
a[donttouch=''] { font-weight: normal; color: blue }

从技术上讲,您使用'donttouch'属性设置元素样式,但您可以使用默认值。这比尝试使用正则表达式解析HTML更有效,这通常是一个坏主意。