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