2012-06-08 46 views
3

我有以下代码:如何修复删除HTML注释的正则表达式从删除条件注释?

source = Regex.Replace(source, "<!--.*?-->", string.Empty, RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled); 

...并能正常工作,但它也除掉条件注释:

<!--[if IE]>???<![endif]--> 

谁能告诉我如何更新正则表达式,因此不删除条件注释?

+0

如果它跟你想要的东西像正则表达式的传统规则: Regex.Replace(来源: “< - \ S [^ \\] * - !?。?>” 字符串。空,RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.Compiled); 例如。 '忽略任何空格,如果有[注释开始后的标记],则不匹配。 – Soz

回答

3

您可以使用negative lookaheads and negative look behinds

<!--(?!\[).*?(?!<\])--> 

应该只匹配<!--后面没有[和任何-->不是由前面],当然,在*?匹配中间的文本。

使用Derek Slager's非常有用的和快速的正则表达式测试仪进行测试:

源文本:

<!--[if IE]>???<![endif]--> 
<!--Comment--> 

图样:

<!--(?!\[).*?(?!<\])--> 

结果:

找到1匹配:

1. <!--Comment--> 
+0

谢谢!这工作像一个魅力。 – Gup3rSuR4c