Как мне извлечь слова из строки, разделенной запятыми, в Perl?
Вопрос
У меня есть реплика:
$myline = 'ca,cb,cc,cd,ce';
Мне нужно соответствовать ка в $1, CB в $2, и т.д..
К сожалению
$myline =~ /(?:(\w+),?)+/;
не работает.С pcretest это соответствует только 'ce' в 1 доллар.Как это сделать правильно?Нужно ли мне помещать это в цикл while?
Спасибо!
Решение
Почему бы не использовать 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;