这是最好的我能想出
$re = "/\sstyle\=('|\").*?(?<!\\\\)\1/i";
$str = "<a href=\"link.html\" style=\"color:#FF0000;\"\" class=\"someclass\">Link</a>";
$subst = '';
$result = preg_replace($re, $subst, $str, 1);
输出
<a href="link.html" class="someclass">Link</a>
演示:
http://regex101.com/r/uW2kB8/8
说明:
\s match any white space character [\r\n\t\f ]
style matches the characters style literally (case insensitive)
\= matches the character = literally
1st Capturing group ('|")
1st Alternative: '
' matches the character ' literally
2nd Alternative: "
" matches the character " literally
.*? matches any character (except newline)
Quantifier: Between zero and unlimited times, as few times as possible, expanding as needed [lazy]
(?<!\\) Negative Lookbehind - Assert that it is impossible to match the regex below
\\ matches the character \ literally
\1 matches the same text as most recently matched by the 1st capturing group
i modifier: insensitive. Case insensitive match (ignores case of [a-zA-Z])
甚至会处理这样的情况。
<a href="link.html" style="background-image:url(\"..\somimage.png\");" class="someclass">Link</a>
和
<a href="link.html" style="background-image:url('..\somimage.png');" class="someclass">Link</a>
和(它不会删除)
<a href="link.html" data-style="background-image:url('..\somimage.png');" class="someclass">Link</a>
甚至
<a href='link.html' style='color:#FF0000;' class='someclass'>Link</a>
http://regex101.com/r/uW2kB8/11
不像其他建议:)
谢谢。非常感激! – JROB
你应该添加\ s?可选的领先空间就在风格之前,或者你留下一个双倍空间,:-p,也是你的第二个离开“链接”,因为没有捕获组,并且你匹配标签的起始<标签 – ArtisticPhoenix
@ArtisiticPhoenix同意。更新。 –