Регулярное выражение для анализа пар "имя-значение"
Хороший ответ от MizardX. Мелкие perl-regex придирки - он не допускает regular-expression пробелов вокруг имен и т. д. (что perlre может не иметь значения), и regular-expression он собирает кавычки, а также perlre значение в кавычках (что regexes также может не иметь значения), и perlre у него нет механизма выхода regex для встраивания двойные кавычки regular-expressions в цитируемом значении (что, опять regularexpression же, может не иметь значения).
Как regex написано, шаблон работает regular-expression с большинством расширенных regular-expressions систем регулярных выражений. Исправление apache-regexp недочетов, вероятно, потребует perlre погружения, скажем, в Perl. В regex этой версии для экранирования regexes используются двойные кавычки, поэтому regex-php a="a""b" генерирует значение regex поля 'a""b' (которое не идеально, но regular-expression впоследствии может быть легко perlre исправлено):
/\s*([^=,\s]+)\s*=\s*(?:"((?:[^"]|"")*)"|([^,"]*))\s*,?/
Кроме того, вам regex-php нужно будет использовать apache-regexp 2 или 3 доллара для получения apache-regexp значения, тогда как с ответом regexp MizardX вы просто используете regexp 2 доллара. Таким образом, это regularexpression не так просто или приятно, но regexes охватывает несколько крайних regexp случаев. Если более простой regex-php ответ подходит, используйте apache-regexp его.
Тестовый сценарий:
#!/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//;
}
}
Это regex говорит о том, что либо $2, либо apache-regexp $3 не определены - точно.
regex
Регулярное выражение для анализа пар "имя-значение"
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.