求助:编写正则表达式按指定规则提取域名目标字段
域名提取正则方案
需求梳理
待匹配域名样本:
dns.google x2.xdn.cbn.com hello.1234.extra.net.com
匹配规则要求:
- 匹配
dns.google时无输出结果 - 匹配
x2.xdn.cbn.com时仅提取cbn.com字段 - 匹配
hello.1234.extra.net.com时仅提取net.com字段
规则本质:仅当域名包含2个及以上分隔点(即点分段数≥3)时,提取最末尾的2段域名,2段及以下域名不返回结果。
可用正则
(?<=\.)[^.]+\.[^.]+$
逻辑说明
- 末尾的
[^.]+\.[^.]+$负责锁定域名最末尾的两段结构,匹配格式为xxx.yyy、直到字符串结尾的内容,自动排除更长的多级前缀 - 前置的
(?<=\.)是正向肯定断言,要求匹配到的两段内容前面必须紧邻点分隔符,直接过滤掉只有两段的域名(这类域名的两段内容前面没有点,无法触发匹配) - 你之前使用的
(?<=\.).+不符合要求,核心问题是没有限定匹配内容的结构,会直接匹配第一个点之后的所有剩余字符,无法精准定位到最后两段。
效果验证
- 输入
dns.google:无匹配结果,符合要求 - 输入
x2.xdn.cbn.com:匹配输出cbn.com,符合要求 - 输入
hello.1234.extra.net.com:匹配输出net.com,符合要求
内容的提问来源于stack exchange,提问作者evilcorp
相关产品推荐
相关产品推荐

