Я пишу парсер на Perl, и вот проблема с split. Вот мой код:Perl split by regexp issue
my $str = 'a,b,"c,d",e';
my @arr = split(/,(?=([^\"]*\"[^\"]*\")*[^\"]*$)/, $str);
# try to split the string by comma delimiter, but only if comma is followed by the even or zero number of quotes
foreach my $val (@arr) {
print "$val\n"
}
Я ожидал следующее:
a
b
"c,d"
e
Но это то, что я действительно получил:
a
b,"c,d"
b
"c,d"
"c,d"
e
Я вижу, мои части строк в массиве , их индексы равны 0, 2, 4, 6. Но как избежать этих нечетных b,"c,d"
и других частей строки ожидания в результирующем массиве? Есть ли какая-либо ошибка в моем разделителе регулярных выражений или есть некоторые специальные параметры split
?
сделать соответствующие вместо расщепления ' "[^"] *" | [ ^,] + ' –
Вы используете _split_ и причудливое регулярное выражение в Perl и никогда не слышали, что сплит создает элементы из групп захвата? – sln