首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 正則匹配 HTML 鏈接:優化 Regex 處理 href 中的空白字符

     編輯:程式設計綜合問答

問題現象

原始正則 href=(['\""]?)(?<url>[^'\"\"\\s>]+) 無法匹配含空格的 URL(如 href=\" https://example.com \"),導致提取失敗。

優化後的正則

Regex reg = new Regex(@"(?is)<a[^>]*?href=(['\""]?)(\s*?<url>[^'\"\"\\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");

關鍵改動:在捕獲組前加入 \\s*? 匹配可選空白字符(空格、換行、Tab)。

完整提取範例

string html = "<a href=\"  https://test.com \">Link</a>";
Regex reg = new Regex(@"(?is)<a[^>]*?href=(['\""]?)\s*(?<url>[^'\"\"\\s>]+)\1[^>]*>(?<text>.*?)</a>");
MatchCollection mc = reg.Matches(html);
foreach (Match m in mc) {
    Console.WriteLine("URL: " + m.Groups["url"].Value.Trim());
    Console.WriteLine("Text: " + m.Groups["text"].Value.Trim());
}

最佳實踐建議

  • 解析 HTML 建議使用 HtmlAgilityPack 或 AngleSharp 等專用庫,比正則更健壯、可維護。
  • 正則對巢狀標籤、屬性順序變化、單雙引號混用等情況容易失效。
  • 若必須用正則,請充分測試邊界案例(空屬性、實體編碼、跨行等)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved