具有独立组的RegEx

本文关键字:RegEx 独立 | 更新日期: 2023-09-27 18:01:48

我有RegEx下面查找预定义的html标签和它们的属性,如src|href|action。它包含像这样解析字符串的组

:解析字符串

<a data-mydata href="myUrl"></a>
提取组:

[0] {<a data-mydata href="myUrl">}
[1] {}
[2] {<a data-mydata href="}
[3] {myUrl}
[4] {">}
[5] {} //<- Empty result, the data-mydata is not read

正则表达式:

(?<pre><(?:script|img|a|area|link|base|input|frame|iframe|form)''b.*?(?:src|href|action)''s*=''s*['"']''s*)(?<url>.+?)(?<post>''s*['"'][^>]*?>)|(?<data>(data-mydata))

问题是,我想检查属性data-mydata,但group 5返回空结果{}data-mydata属性是可选的,但我需要知道data-mydata是否存在。

具有独立组的RegEx

当你有一个匹配,你可以检索组5,看看它是否成功

match.Groups[5].Success

或命名

match.Groups["data"].Success

还要确保前一组不贪婪地匹配结束标记(),添加?到组的末尾所以它在开始标签

的末尾停止
(?<tag><a's(?<data>data-mydata)?)?.*(?<end><'/a>)

这可以匹配其中的3个组,注意一个组嵌套在另一个组中作为可选的匹配(?)

<a data-mydata href="myUrl"></a>

tag     [0-15]  `<a data-mydata `
data    [3-15]  `data-mydata `
end     [28-32] `</a>`

<a href="myUrl"></a>

tag [0-3]   `<a `
end [16-20] `</a>`