基于PCRE/.NET 4.7匹配以global开头行内独立域名
匹配
global开头行中独立域名的正则方案 嘿,针对你要仅提取global开头行里的独立域名、还要兼容PCRE/.NET 4.7和BMC类工具的需求,我整理了一套靠谱的正则方案:
正则表达式
\b[a-z0-9.-]+\.[a-z]{2,}\b(?<=(?:^\s*global domain-name\b)(?:\s+\w[\w.-]*)*\s)(?=(?:\s+\w[\w.-]*)*\s*$)
需要搭配**多行模式(m修饰符)**使用,若域名可能包含大写字母,可额外添加i修饰符开启不区分大小写匹配。
正则拆解(为什么这么写)
\b[a-z0-9.-]+\.[a-z]{2,}\b:精准匹配独立域名——\b确保不会匹配域名的一部分,[a-z0-9.-]+覆盖域名的主体部分,\.[a-z]{2,}匹配至少2个字符的顶级域名(比如.com、.local)(?<=(?:^\s*global domain-name\b)(?:\s+\w[\w.-]*)*\s):正向后行断言,用来锁定域名所在行必须以global domain-name开头。^\s*忽略行首可能的空白,(?:\s+\w[\w.-]*)*允许匹配当前域名之前的其他同域名,这样该行里的每个域名都能被单独匹配到(?=(?:\s+\w[\w.-]*)*\s*$):正向先行断言,确保当前域名后面是该行剩余的域名或行尾,彻底排除其他行(比如upstream开头的行)里的域名m修饰符:开启后^和$会匹配每行的开头和结尾,这是实现按行筛选的核心
使用提示
- 在BMC或其他PCRE类工具里,记得找到“多行模式”的选项勾选上,或者在正则末尾加上
(?m)来启用 - .NET 4.7里直接在Regex构造函数中指定
RegexOptions.Multiline即可 - 这个正则的匹配结果是单个独立域名,每次匹配返回一个符合条件的域名,完全满足你“独立匹配而非分组匹配”的要求
内容的提问来源于stack exchange,提问作者Brian Mitchell
相关产品推荐
相关产品推荐

