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