0

我想解析 html 文件中的所有链接标签。因此,为此我编写了以下正则表达式。

var pattern = @"<(LINK).*?HREF=(""|')?(?<URL>.*?)(""|')?.*?>";
var regExOptions = RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline;

var linkRegEx = new Regex(pattern , regExOptions );

foreach (Match match in linkRegEx.Matches(htmlFile))
{
    var group = match.Groups["URL"];
    var url = group.Value;
} 

但是发生的情况是我从 html 文件中找到了匹配项,但我得到了空白的捕获组。

4

1 回答 1

1

你可以试试这样的模式:

var pattern = @"<(LINK).*?HREF=(?:([""'])(?<URL>.*?)\2|(?<URL>[^\s>]*)).*?>";

这将匹配:

  • 字面意思<
  • 一个文字LINK,在第 1 组中捕获
  • 零个或多个任何字符,非贪婪
  • 以下任一项
    • 一个"or ',在第 2 组中捕获
    • 零个或多个非贪婪地在 group 中捕获的任何角色URL
    • 第 2 组中匹配的任何内容(这\2是一个反向引用)
    • 零个或多个除空格之外的任何字符>,或者贪婪地在 group 中捕获URL
  • 零个或多个任何字符,非贪婪
  • 字面意思>

这将正确处理以下输入:

  • <LINK HREF="Foo">生产url = "Foo"
  • <LINK HREF='Bar'>生产url = "Bar"
  • <LINK HREF=Baz>生产url = "Baz"
于 2013-10-09T19:56:01.620 回答