2013-02-09 106 views
0

我试图将CSS样式添加到所有超链接除非它具有“donttouch”属性。preg_replace除非存在字符串

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) 

我看遍了各地,并希望有任何帮助。

+7

为此,您最好使用真正的HTML解析器。 – icktoofay 2013-02-09 22:42:49

+0

或者使用CSS类。 – Arjan 2013-02-09 22:45:36

+0

@Arjan它正在生成一个用于电子邮件的模板,所以CSS类不幸出现问题---所有的CSS都必须内联 – skinnyandbald 2013-02-09 22:46:58

回答

0

查找(也工作在记事本++)

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

替换(在记事本中全部替换++):

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

这可没有一个正则表达式来完成。相反,使用CSS属性选择器。

例如,使用这些规则:

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

从技术上说,你是用“donttouch”属性造型的元素,但是你可以使用默认值。这将比试图使用正则表达式来解析HTML更有效率,这通常是一个坏主意。

+0

谢谢乔治。它生成一个用于电子邮件的模板,所以不幸的是所有的CSS都需要内联 – skinnyandbald 2013-02-10 20:45:51

相关问题