У меня есть эта строка:
my $string = "2, 16, \"d4,d6\", \"d20,d22\", [0]";
и я использую разделение так:
my @arglist = split(/,/, $string);
Проблема в том, что изначально у меня никогда не было этих запятых в кавычках, и теперь у меня есть, и мне нужно обновить это разделенное регулярное выражение для обработки этого случая.
Пожалуйста, , абсолютно не упоминайте ничего, кроме того, что я прошу. Я искал достаточно, и более половины ответов - это шум о том, насколько сложен синтаксический анализ CSV и т. Д. И т. Д. Я не написал тот сценарий, который мне нужно исправить, и все, что я хочу, - это изменить эту единственную строку, которая выполняет разбиение, поэтому он должен быть простым регулярным выражением, которое делает это. Там не будет никаких обновлений, и текст, который он разделяет, будет таким только:
CHROMA_MC_X \width, \align, "d4,d5,d6,d7", "d20,d21,d22,d23"
CHROMA_MC_X \width, \align, "d4,d6", "d20,d22", [0]
CHROMA_MC_X \width, \align, "d4,d6", "d20,d22", [0]
EDIT
Ответа Бирея было достаточно, чтобы начать с. Я закончил готовить это регулярное выражение, которое отлично подходит для моего случая:
my @arglist = $3 =~ m/(?:(?<=")[^"]*(?=(?:\s*"\s*,|\s*"\s*$)))|(?<=,)(?:[^",]*(?=(?:\s*,|\s*$)))|(?<=^)(?:[^",]+(?=(?:\s*,|\s*$)))|(?<=^)(?:[^",]*(?=(?:\s*,)))/g;
Это выглядит грязно, но это именно то, что мне нужно. Он сопоставляет цитируемые списки с запятыми и возвращает их без кавычек, были некоторые проблемы с пустыми аргументами, которые могли присутствовать, и это регулярное выражение беспорядочно, потому что оно просто обрабатывает эти случаи и избегает этой ошибки с переменной длина, которая не реализована в регулярном выражении Perl.
Чего я не понимаю: в чем причина всех этих отрицательных голосов, я атакован некоторыми Perl-гуру, которые думают, что я не знаю, что мне нужно и чего я прошу ?! У меня есть инструмент, который выполняет некоторую предварительную обработку asm, и все, что мне нужно, это обработать несколько случаев. ВОТ И ВСЕ. Спасибо за помощь.