簡體   English   中英

正則表達式中的字符轉義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM