2013-06-06 26 views
0

逃避我用這個正則表達式匹配的是包含在hrefC#字符在正則表達式

<a(.*?)? href=\".*?" + word + ".*?\"(.*?)?>.*?</a> 

這將返回匹配鏈路

現在我需要找到的第一個外觀的特定詞的超級鏈接所有超鏈接的任意不等階同一場比賽中,我已經嘗試過此正則表達式:

/<a [^>]*\bhref\s*=\s*"[^"]*word.*?<\/a>/ 

我在做我的編譯器接受這種表達一些問題。這個問題似乎在逃避一些特殊字符。看起來這部分是一個問題

"[^"] 

我試着轉義[與\,並把@放在雙引號,但沒有運氣。

該錯誤讀取「不良編譯常量值」。

有誰知道如何格式化這個正則表達式以滿足編譯器?

+0

你需要用''「''轉義''''但是爲什麼使用regex for this.is有任何理由不考慮html解析器 – Anirudha

回答

2

正則表達式是不解析HTML文件的好方法..

您應該使用htmlagilitypack

HtmlWeb web = new HtmlWeb(); 
HtmlDocument doc = web.Load("http://yourWebSite.com"); 

List<String> hrefLst=doc.DocumentNode 
         .SelectNodes("//a[@href]") 
         .Select(x=>x.Attributes["href"].Value) 
         .Where(y=>y.Contains(word)) 
         .ToList(); 

hrefLst現在有你所需的所有鏈接。

不是那麼簡單!

1

儘管您可以轉義所有需要在字符串中轉義的內容,但當字符串是@引用時,正則表達式更容易閱讀。你唯一需要擔心的是雙引號,需要加倍。

string expression = @"/<a [^>]*\bhref\s*=\s*""[^""]*word.*?<\/a>/"; 

注意:正如評論所說,這個正則表達式可能會失敗。我沒有測試過,我只是修改它來編譯它。

+0

這個正則表達式有1000個case失敗!:P..dont使用正則表達式.am乞求你:( – Anirudha

+0

@joey或者你可以說「不需要開始和結束的斜槓」 – Soeren