Welcome! Log In Create A New Profile

Advanced

Re: переменные $1

April 22, 2020 07:02PM
День добрый.

23.04.2020 0:35, Slawa Olhovchenkov пишет:
> On Thu, Apr 23, 2020 at 12:03:16AM +0300, Maxim Dounin wrote:
>
>>>> Ну да, одно из возможных решений - отучить регулярные выражения в
>>>> map'е трогать $1..$N. С другой стороны - конфигурации вида
>>>>
>>>> map $uri $foo {
>>>> ~(.+) $1;
>>>> }
>>>>
>>>> тоже никто не отменял.
>>> не понимаю возражения.
>>> я как раз о том, что внури map $1..$N локальные и не портят $1..$N в
>>> других местах. очевидно же, что вот этот $1 _вне_ map никому не нужен.
>>> $foo сформировался и никому ничего больше от этого map не требуется.
>> Тут есть два нюанса:
>>
>> 1. Механизм формирования $1..$N - общий, и если map не трогает
>> $1..$N - то конструкция выше работать не будет. А делать так,
>> чтобы $1..$N использовали результат выполнения конкретного
>> регулярного выражения, а не просто последнего - логично как раз в
>> рамках rewrite'а, где это конкретное регулярное выражение
>> очевидно. (Ну то есть в рамках map'а следом тоже встанет вопрос,
>> когда в правой части будет $bar$1, где $bar - ещё один map с
>> регулярным выражением. Но это, очевидно, надо будет решать так
>> же.)
>>
>> 2. Вообще говоря, побочные эффекты от регулярных выражений в map'е
>> быть должны, те же именованные captures - вполне логично
>> использовать и много кто использует на практике. Использовать
>> побочные эффекты в виде $1..$N - с моей точки зрения странно, но
>> теоретически и это вполне может быть.
> я понимаю откуда взялось.
> что не отменяет гемороя.
>
>>>>>> https://trac.nginx.org/nginx/ticket/564
>>>>>>
>>>>>> Patches are welcome.
>>>>> 6 лет...
>>>> Да, за 6 лет никто не сподобился даже попытаться прислать патч.
>>>> Что как бы позволяет предложить, что - не жмёт.
>>> или никто не может разобраться.
>> Это не "или", это именно что "не жмёт". Затраты на попытаться
>> разобраться - превышают количество проблем, которые создаёт
>> текущее поведение.
> ну хоть бы в документацию большими буквами.
> я не получил большого гемороя только из-за того что в процессе у меня
> и так полный дебаг был включен по другому поводу и я сразу увидел
> такой фифект.


А что, кроме лени, мешает не пользоваться $1$2$3 вообще, а использовать

1. поименованные переменные (?<uniqvar>...)

$uniqvar

2. везде, где переменные не нужны или не использовать скобки, а если не
возможно или не удобно, использовать  отказ от создания переменной (?:...) ?

и тогда точно будем знать что


map $... {

  ~^start(?<mapvar>)end$  '1';

}


location /(?<locvar>.+)/$ {

  rewrite ^(?:.+)$ /$mapvar/$locvar/? break;

приведет к тому, что хочется.


нет ?




_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

переменные $1

Slawa Olhovchenkov April 22, 2020 09:32AM

Re: переменные $1

Maxim Dounin April 22, 2020 10:40AM

Re: переменные $1

Slawa Olhovchenkov April 22, 2020 11:16AM

Re: переменные $1

Maxim Dounin April 22, 2020 12:00PM

Re: переменные $1

Slawa Olhovchenkov April 22, 2020 12:16PM

Re: переменные $1

Илья Шипицин April 22, 2020 01:00PM

Re: переменные $1

Maxim Dounin April 22, 2020 05:04PM

Re: переменные $1

Slawa Olhovchenkov April 22, 2020 05:36PM

Re: переменные $1

ngnx8810773a83 April 22, 2020 07:02PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 107
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready