2010-01-19 72 views
0

我想从下面一个HTML字符串去掉所有锚标签之间的链接和文本:正则表达式剥离锚标记之间的一切

string LINK_TAG_PATTERN = "/<a\b[^>]*>(.*?)<\\/a>"; 

htmltext = Regex.Replace(htmltext, LINK_TAG_PATTERN, string.Empty); 

这不是工作人有想法,为什么?

非常感谢,

编辑:正则表达式是从该链接Extract text and links from HTML using Regular Expressions

+0

如果您尝试使用RegEx处理HTML/XML,请注意它不起作用,因为我相信HTML/XML是上下文无关语言,但不是正则语言。 – 2010-01-19 13:20:08

回答

2

问题在您的字符串:?在开始不必要的斜杠(这是Perl的语法),转义反斜杠(\b),不需要转义反斜杠(\\

所以,如果是一个正则表达式,采取一切警告考虑有足够的其他人联系,尽量

string LINK_TAG_PATTERN = @"<a\b[^>]*>(.*?)</a>"; 
htmltext = Regex.Replace(htmltext, LINK_TAG_PATTERN, string.Empty, RegexOptions.IgnoreCase); 

\b是必要的,以防止与a从匹配启动其他标签。

2

我建议Expresso解决的正则表达式。您可以找到一个正则表达式库here

您可能会考虑使用javascript来代替正则表达式来替换DOM树。

0

概念上,这只是一个非常特殊的条链接(例如你的正则表达式不匹配大写A,A是完全有效的HTML:<A ...>bla</A>更换不会对JavaScript的链接工作,要么。是您的代码相关的用户安全

2
string LINK_TAG_PATTERN = @"(<a\s+[^>]*>)(.*?)(</a>)"; 

htmltext = Regex.Replace(htmltext, LINK_TAG_PATTERN, "$1$3", RegexOptions.IgnoreCase);