Регулярное совпадение регулярного выражения с Perl
Вопрос Noob. У меня очень простой perl script, и я хочу, чтобы регулярное выражение соответствовало нескольким частям в строке
my $string = "ohai there. ohai";
my @results = $string =~ /(\w\w\w\w)/;
foreach my $x (@results){
print "$x\n";
}
Это не работает так, как я хочу, поскольку он возвращает ohai. Я бы хотел, чтобы он соответствовал и распечатывал ohai ther ohai
Как я могу это сделать.
Спасибо
Ответы
Ответ 1
Будет ли это делать то, что вы хотите?
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";
}
Ответ 2
Или вы могли бы сделать это
my $string = "ohai there. ohai";
my @matches = split(/\s/, $string);
foreach my $x (@matches) {
print "$x\n";
}
Функция split в этом случае разбивается на пробелы и печатает
ohai
there.
ohai