Хороший ответ от MizardX. Незначительные недоработки - он не учитывает пробелы вокруг имен и т. Д. (Что может не иметь значения), и он собирает кавычки, а также значение в кавычках (что также может не иметь значения) и не имеет механизма выхода для встраивания двойные кавычки в кавычках (что, опять же, может не иметь значения).
Как написано, шаблон работает с большинством расширенных систем регулярных выражений. Для исправления ошибок, возможно, потребуется спуск, скажем, в Perl. Эта версия использует двойные кавычки для выхода - следовательно, a = "a" "b" генерирует значение поля 'a "" b' (которое не является идеальным, но впоследствии может быть исправлено достаточно легко):
/\s*([^=,\s]+)\s*=\s*(?:"((?:[^"]|"")*)"|([^,"]*))\s*,?/
Кроме того, вам придется использовать 2 или 3 доллара для сбора значения, тогда как в ответе MizardX вы просто используете 2 доллара. Так что это не так просто и приятно, но охватывает несколько крайних случаев. Если более простой ответ является адекватным, используйте его.
Тестовый скрипт:
#!/bin/perl -w
use strict;
my $qr = qr/\s*([^=,\s]+)\s*=\s*(?:"((?:[^"]|"")*)"|([^,"]*))\s*,?/;
while (<>)
{
while (m/$qr/)
{
print "1= $1, 2 = $2, 3 = $3\n";
$_ =~ s/$qr//;
}
}
Это свидетельствует о том, что 2 или 3 доллара не определены - точно.