Hello! On Thu, May 21, 2020 at 10:33:25PM -0400, gz wrote:
> При использовании регулярных выражений в map обнуляются выделения уровня > location, даже в случае, если в выражениях map не используются выделения. [...] > Из формулировки в документации складывается ощущение, что значения > позиционных выделений location'а будут переопределены если они используются > в map. > Но если их в map нет, странно получать пустые значения. > > Я неправильно понимаю документацию или это ошибка? Ощущение складывается неправильное, переменные $1..$9 всегда относятся к последнему поматчившемуся регулярному выражению. Если в этом последнем выполненном регулярном выражении выделений нет (или конкретное выделение не поматчилось, например, из-за ветвлений), то они будут пустыми. Это общий принцип работы переменных $1..$9 приблизительно везде, так что он, видимо, в явном виде в документации не описан. Скажем, в перле то же самое можно пронаблюдать так: $ echo foobar | perl -nle 'm/(...)/; print "match: $1"; m/foo/; print "match: $1";' match: foo match: С учётом декларативной природы конфигурации nginx'а - такое поведение делат переменные $1..$9 малопригодными для использования в сложных конфигурациях. Особенно следует быть осторожным при использовании $1..$9, если значения получены из регулярных выражений в server_name или location: работать будет только в совсем простых конфигурациях. В сколько-нибудь сложных случаях правильно, если есть необходимость использовать выделения, использовать именованные выделения. -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru