You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式匹配问题:无法捕获第二组IP-名称对

解决正则无法捕获同一行多组IP的问题

你的正则只能匹配name/names行开头后的第一组IP与名称,同一行内的第二组因为没有重复匹配逻辑所以无法捕获。以下是两种可行的解决方法:

方法1:分两次匹配(更易理解)

先匹配name/names开头的整行内容,再在该行内匹配所有IP+名称组:

while( $data =~ /^(?:name|names)\s+(.*)$/mg) {
    my $line_data = $1;
    while ($line_data =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\S+)/g) {
        $LOGGER->debug("IPs : $1 : $2");
    }
}

方法2:单正则连续捕获

利用\G锚点实现同一行内的连续匹配,无需拆分处理:

while( $data =~ /(?:^(?:name|names)\s+|\G(?!^)\s+)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\S+)/mg) {
    $LOGGER->debug("IPs : $1 : $2");
}

正则说明:

  • ^(?:name|names)\s+:匹配行开头的name或names及后续空格
  • \G(?!^)\s+:\G表示上一次匹配结束的位置,(?!^)避免匹配行首,确保匹配的是前一组之后的空格
  • 后续的捕获组负责抓取IP和对应的名称

两种方法都能捕获到所有目标内容:1.1.1.1 testIp1、2.2.2.2 testIp2、192.168.1.1 testIp3,同时排除umesh开头的行。

内容的提问来源于stack exchange,提问作者umesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:40:36