使用Perl多次匹配正则表达式

时间:2011-06-16 15:52:35

标签: regex perl

Noob在这里提问。我有一个非常简单的perl脚本,我希望正则表达式匹配字符串中的多个部分

my $string = "ohai there. ohai";
my @results = $string =~ /(\w\w\w\w)/;
foreach my $x (@results){
    print "$x\n";
}

这不是我想要的方式,因为它只返回 ohai 。我希望它匹配并打印 ohai ther ohai

我将如何做到这一点。

由于

2 个答案:

答案 0 :(得分:28)

这会做你想要的吗?

my $string = "ohai there. ohai";
while ($string =~ m/(\w\w\w\w)/g) {
    print "$1\n";
}

返回

ohai
ther
ohai

来自perlretut:

  

修饰符“// g”代表全局匹配并允许   匹配运算符以匹配a   字符串尽可能多次。

另外,如果你想把匹配放在数组中,你可以这样做:

my $string = "ohai there. ohai";
my @matches = ($string =~ m/(\w\w\w\w)/g);
foreach my $x (@matches) {
    print "$x\n";
}    

答案 1 :(得分:0)

或者你可以这样做

my $string = "ohai there. ohai";
my @matches = split(/\s/, $string);
foreach my $x (@matches) {
  print "$x\n";
}   

在这种情况下,拆分功能会拆分空格并打印

ohai
there.
ohai