Как извлечь слова из строки, разделенной запятыми в Perl?


У меня есть строка:

$myline = 'ca,cb,cc,cd,ce';

Мне нужно сопоставить ca в $1, cb в $2, и т.д..

К сожалению

$myline =~ /(?:(w+),?)+/;

Не работает. С pcretest он только соответствует ' ce ' в $1. Как это сделать правильно? Нужно ли вставлять его в цикл while?

Спасибо!

5 2

5 ответов:

Почему бы не использовать split функция :

@parts = split(/,/,$myline);

split разбивает строку на список строк, используя регулярное выражение, которое вы предоставляете в качестве разделителя.

Не проще ли использовать my @parts = split(/,/, $myline)?

Хотя split - Хороший способ решить вашу проблему, регулярное выражение захвата в контексте списка также хорошо работает. Полезно знать об обоих подходах.

my $line = 'ca,cb,cc,cd,ce';
my @words = $line =~ /(\w+)/g;

Загляните в CSV PM, которые вы можете скачать из CPAN, т. е. Text::CSV или Text::CSV_XS.

Это даст вам то, что вам нужно, а также учтет любые разделенные запятыми значения, которые случайно будут заключены в кавычки.

Использование этих модулей позволяет легко разделить данные и проанализировать их...

Например:

my @field = $csv->fields;

Если количество элементов является переменным, то вы не собираетесь делать это так, как вы стремитесь. Цикл через строку с использованием глобального флага:

while($myline =~ /(\w+)\b/g) {
    # do something with $1
}
Я собираюсь предположить,что ваши реальные данные более сложны,чем "ca,cb,cc, cd, ce", однако если это не так, то использование регулярных выражений, вероятно, не оправдано. Вам лучше разделить строку на разделяющий символ:
my @things = split ',', $myline;