C#:解析超鏈接和它們的描述的正則表達式是什麼?解析超鏈接和描述的正則表達式
請考慮HREF標籤周圍的大小寫不敏感,空格和使用單引號(而不是雙引號)。
也請考慮獲取在<a>
標記中包含其他標記的超鏈接,例如<b>
和<i>
。
C#:解析超鏈接和它們的描述的正則表達式是什麼?解析超鏈接和描述的正則表達式
請考慮HREF標籤周圍的大小寫不敏感,空格和使用單引號(而不是雙引號)。
也請考慮獲取在<a>
標記中包含其他標記的超鏈接,例如<b>
和<i>
。
只要沒有嵌套標記(沒有換行符),下面的變形效果很好:
<a\s+href=(?:"([^"]+)"|'([^']+)').*?>(.*?)</a>
一旦隨着嵌套標籤的進入玩,正則表達式不適合解析。不過,您仍然可以通過應用現代解釋器的更高級功能(取決於您的正則表達式機器)來使用它們。例如。 .NET正則表達式使用堆棧;我發現這一點:
(?:<a.*?href=[""'](?<url>.*?)[""'].*?>)(?<name>(?><a[^<]*>(?<DEPTH>)|</a>(?<-DEPTH>)|.)+)(?(DEPTH)(?!))(?:</a>)
來源:http://weblogs.asp.net/scottcate/archive/2004/12/13/281955.aspx
I found this但顯然these guys有一些問題。
編輯:(它的工作原理!)
我現在已經做了我自己的測試,發現它的作品,我不知道C#,所以我不能給你一個C#的答案,但我知道PHP和這裏的比賽陣列我從運行這樣的事回來:
<a href="pages/index.php" title="the title">Text</a>
array(3) { [0]=> string(52) "Text" [1]=> string(15) "pages/index.php" [2]=> string(4) "Text" }
我have a regex,處理大多數情況下,但我相信它確實多行註釋中匹配的HTML。
它使用.NET語法編寫,但應易於翻譯。
見的,而不是一個破碎的正則表達式從StackOverflow: Regular expression for parsing links from a webpage?
使用The HTML Agility Pack可以解析HTML,並提取使用HTML的語義信息這個例子。
只是要把這個片段扔出去,現在我有它的工作..這是一個不太貪婪的版本之前建議的一個。如果輸入有多個超鏈接,原始工作將不起作用。下面的代碼將允許您遍歷所有超鏈接:
static Regex rHref = new Regex(@"<a.*?href=[""'](?<url>[^""^']+[.]*?)[""'].*?>(?<keywords>[^<]+[.]*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
public void ParseHyperlinks(string html)
{
MatchCollection mcHref = rHref.Matches(html);
foreach (Match m in mcHref)
AddKeywordLink(m.Groups["keywords"].Value, m.Groups["url"].Value);
}
這裏是一個正則表達式,它將匹配平衡標籤。 (?(?)(?)|(?< -DEPTH>)。。)+)(?(DEPTH)(?!))????????????????????? )(?:)
確切的 - 正則表達式很好,但在HTML或XML上使用它們是痛苦的祕訣。 – slim 2008-09-19 09:15:05