Есть ли в Ruby эквивалент Perl для String.scan? - PullRequest
4 голосов
/ 08 августа 2009

Я хочу сделать это в Perl:

>> "foo bar baz".scan /(\w+)/
=> [["foo"], ["bar"], ["baz"]]

Есть предложения?

Ответы [ 3 ]

12 голосов
/ 08 августа 2009

По сути, это то же самое.

my @elem = "foo bar baz" =~ /(\w+)/g

Вы также можете установить переменную «скаляр по умолчанию» $_.

$_ = "foo bar baz";
my @elem = /(\w+)/g;

См. perldoc perlre для получения дополнительной информации.


Если вы хотите использовать только эту строку в качестве массива, вы можете использовать qw().

my @elem = qw"foo bar baz";

См. perldoc perlop (Операторы цитирования и подобные) .

3 голосов
/ 08 августа 2009

Кроме того, разделить, например,

my $x = "foo bar baz";
my @elem = split(' ', $x);

OR

my @elem = split(/\w+/, $x);

и т.д.

1 голос
/ 19 марта 2010

Они представляют собой ключевую концепцию perl - скаляр и контекст списка. Присвоение выражения массиву вызывает контекст списка, как и цикл while.

Таким образом, эквивалентом блочной формы сканирования String # является использование регулярного выражения с циклом while:

while ("foo bar baz" =~ /(\w+)/) {
    my $word = $1;
    do_something_with($word);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...