Соответствие регулярному выражению несколько раз с Perl - PullRequest
10 голосов
/ 16 июня 2011

нубский вопрос тут.У меня очень простой 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 ]

28 голосов
/ 16 июня 2011

Будет ли это делать то, что вы хотите?

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

Возвращает

ohai
ther
ohai

От perlretut:

Модификатор "// g" обозначает глобальное сопоставление и позволяет оператор сопоставления для сопоставления в Строка столько раз, сколько возможно.

Также, если вы хотите вместо этого поместить совпадения в массив, вы можете сделать:

my $string = "ohai there. ohai";
my @matches = ($string =~ m/(\w\w\w\w)/g);
foreach my $x (@matches) {
    print "$x\n";
}    
0 голосов
/ 25 апреля 2013

Или вы могли бы сделать это

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

Функция разделения в этом случае разделяется на пробелы и печатает

ohai
there.
ohai
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...