正则表达式捕获组问题
本文关键字:问题 正则表达式 | 更新日期: 2023-09-27 18:34:43
我想解析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文件中找到了匹配项,但是我得到了空白捕获组。
你可以尝试这样的模式:
var pattern = @"<(LINK).*?HREF=(?:([""'])(?<URL>.*?)'2|(?<URL>[^'s>]*)).*?>";
这将匹配:
- 字面上的
<
- 字面
LINK
,在第1组中捕获 - 零或多个任何字符,非贪婪
- 以下任一情况
- 单个
"
或'
,在第2组中捕获 - 零个或多个任何角色,非贪婪地,在组
URL
中捕获. - 第 2 组中匹配的任何内容(
'2
是反向引用(
或 - 除空格或
>
之外的任何字符的零个或多个,贪婪地捕获在组URL
中。
- 单个
- 零或多个任何字符,非贪婪
- 字面上的
>
这将正确处理以下输入:
-
<LINK HREF="Foo">
产生url = "Foo"
-
<LINK HREF='Bar'>
产生url = "Bar"
-
<LINK HREF=Baz>
产生url = "Baz"