如何创建一个正则表达式匹配数组

时间:2013-06-02 21:09:27

标签: regex perl

我正在尝试创建以下数组:

@domains = ("lmcaster.espn.go.com", "gomailfileus.go.com");

我正在尝试使用正则表达式,但我没有成功填充数组。我很确定我的正则表达式部分搞砸了。到目前为止,这是我的代码:

#!/usr/bin/perl
use strict;
use warnings;

my $dns_output = <<END;
199.181.132.138  lmcaster.espn.go.com (300)
199.181.132.133  gomailfileus.go.com (300)
END

my @domains = ($dns_output =~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\s([[:graph:]])\s[[:graph:]]/);

for my $d (@domains) {
        print "Domain: $d\n";
}

有人可以指出我做错了吗?

2 个答案:

答案 0 :(得分:3)

首先,您忘记添加/g修饰符,并添加+量词,以便捕获整个域(而不仅仅是其第一个符号),第二个。

my @domains = $dns_output =~ /(?:[0-9]+\.){3}[0-9]+\s*([[:graph:]]+)/g;

我也在这里压缩了IP分组,并将*量词添加到\s分隔域。

答案 1 :(得分:1)

my @domains = $dns_output =~ /^ \d+[.]\d+[.]\d+[.]\d+ \s+ (\S+) /xmg;