鉴于一个包含多个域名的字符串,我需要仅匹配该行以" global
"开头的域名。它们必须是个人匹配而不是群组。
正则表达式是PCRE / .NET 4.7。相同的正则表达式将用于其他PCRE工具,如BMC软件工具。
字符串内容:
upstream domain-name some.domain.com some.domain.net
upstream domain-name another.domain.com
global domain-name some.domain.com some.domain.net
global domain-name some.domain.local
downstream domain-name some.domain.com some.domain.net
downstream domain-name some.domain.com
例如,从global
开头的行,我希望将somedomain.com
some.domain.net
some.domain.local
作为3个单独的匹配项返回(MatchCollection
)
我知道我可以使用(?<=global domain-name ).*
,但我必须string.Split()
和some.domain.com
之间的空格some.domain.net
。这不是一个完全糟糕的解决方案,但我真的希望这些比赛是个人的。
我越来越接近(?<=global domain-name )\S*
,但它只返回遇到的第一个域名给我输出:
somedomain.com
somedomain.local
并且不匹配somedomain.net
。
我已经玩了好几个小时了,并且一直在想\G
是否可能是一个选项,但我对此并不了解,也无法得到它工作。
我确定解决方案非常简单,但我对Regex并不是很满意,所以我们非常感谢任何模式帮助!
答案 0 :(得分:0)
如果您在global
行上添加前缀以包含可选域名,则会在一个表达式中执行此操作:
var ans = Regex.Matches(src, @"(?<=^global +[\w-.]+ +(?:[\w-.]) +)*)[\w-.]+", RegexOptions.Multiline);
注意:这在PCRE中不起作用,PCRE不支持不同的长度。
答案 1 :(得分:0)
这可能是匹配和提取你想要的东西
(?m)(?<=^\s*global.*?\s)[\w\.]+\b\.(?:com|net|local)(?=\s|\n|$)
click ,,,其中应用了variable-length lookbehind
,因为.NET regex
支持它。