我認爲這與類似的問題有很大的不同,以保證一個新的。超鏈接正則表達式包括http(s)://不在C#中工作
我有以下的正則表達式匹配HTML開始超級鏈接標籤,包括HTTP(S):爲了避免郵寄地址//部分:連接
<a[^>]*?href=[""'](?<href>\\b(https?)://[^\[\]""]+?)[""'][^>]*?>
當我運行此通過Nregex(帶逃脫刪除)它正確地匹配以下測試用例:
<a href="http://www.bbc.co.uk">
<a href="http://bbc.co.uk">
<a href="https://www.bbc.co.uk">
<a href="mailto:[email protected]">
但是,當我在我的C#代碼中運行它失敗。下面是匹配代碼:
public static IEnumerable<string> GetUrls(this string input, string matchPattern)
{
var matches = Regex.Matches(input, matchPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
foreach (Match match in matches)
{
yield return match.Groups["href"].Value;
}
}
而且我的測試:
@"<a href=""https://www.bbc.co.uk"">bbc</a>".GetUrls(StringExtensions.HtmlUrlRegexPattern).Count().ShouldEqual(1);
@"<a href=""mailto:[email protected]"">bbc</a>".GetUrls(StringExtensions.HtmlUrlRegexPattern).Count().ShouldEqual(0);
的問題似乎是我在其中添加了\\b(https?)://
部分,刪除此通過正常的URL測試,但失敗的mailto:測試。
任何人流光了?
我們沒有做過正則表達式不能解析HTML的東西了嗎?你必須使用一個HTML解析器,其他的都不能保證你的結果。正則表達式解析href屬性的值是另一個問題,雖然... – annakata 2010-03-12 15:58:31
您究竟如何定義'matchPattern'? – 2010-03-12 16:11:57
@Tim'public static string HtmlUrlRegexPattern = @「] *?href = [」''](? \\ b(https?):// [^ \ [\]「」] +?)[「」 '] [^>] *?>「;' –
roryf
2010-03-12 16:35:38