[英]Character escaping in regular expression
我使用這個正則表達式來匹配包含 href 中特定單詞的超鏈接
<a( .*?)? href=\".*?" + word + ".*?\"( .*?)?>.*?</a>
這將返回匹配鏈接的第一次出現
現在我需要找到具有相同匹配項的所有超鏈接,我已經嘗試過這個正則表達式:
/<a [^>]*\bhref\s*=\s*"[^"]*word.*?<\/a>/
我在讓編譯器接受這個表達式時遇到了一些問題。 問題似乎是轉義一些特殊字符。 看來這部分有問題
"[^"]
我嘗試用 \\ 轉義 [ ,並將 @ 放在雙引號前面,但沒有運氣。
錯誤顯示為“錯誤的編譯常量值”。
有誰知道如何格式化這個正則表達式以滿足編譯器?
正則表達式不是解析 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
現在擁有您需要的所有鏈接。
是不是很簡單!
雖然您可以轉義字符串中需要轉義的所有內容,但是當字符串被 @ 引用時,正則表達式更容易閱讀。 然后你唯一需要擔心的是雙引號,它需要加倍。
string expression = @"/<a [^>]*\bhref\s*=\s*""[^""]*word.*?<\/a>/";
注意:正如評論所說,這個正則表達式可能會失敗。 我還沒有測試它,我只是修改它以使其編譯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.