Я собирался задать тот же самый вопрос, и я вроде нашел решение.
Допустим, у вас есть произвольное количество слов, которые вы хотите запечатлеть.
"Есть четыре огня"
и
"Капитан Пикард - бомба"
Вы можете подумать, что решение:
/((\w+)\s?)+/
Но это будет соответствовать только всей входной строке и последней захваченной группе.
Что вы можете сделать, это использовать переключатель "g".
Итак, пример в Perl:
use strict;
use warnings;
my $str1 = "there are four lights";
my $str2 = "captain picard is the bomb";
foreach ( $str1, $str2 ) {
my @a = ( $_ =~ /(\w+)\s?/g );
print "captured groups are: " . join( "|", @a ) . "\n";
}
Вывод:
captured groups are: there|are|four|lights
captured groups are: captain|picard|is|the|bomb
Итак, есть решение, если ваш язык поддерживает эквивалент «g» (и я полагаю, что большинство из них…).
Надеюсь, это поможет тому, кто был в том же положении, что и я!
S