Регулярное совпадение регулярного выражения с Perl

144
19

Вопрос 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


Как я могу это сделать.


Спасибо

спросил(а) 2021-01-19T15:13:34+03:00 2 месяца, 4 недели назад
1
Решение
234

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


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";
}

ответил(а) 2021-01-19T15:13:34+03:00 2 месяца, 4 недели назад
44

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


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

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


ohai
there.
ohai

ответил(а) 2021-01-19T15:13:34+03:00 2 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема