2010-01-19 116 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);