forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.UNIX.BSD

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 22.09.2018, 08:52
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию вопрос по регулярному выражению

Victor Sudakov написал(а) к All в Sep 18 11:38:56 по местному времени:

Dear All,

Для nginx на замену апачевскому mod_userdir предлагается такое решение: https://pastebin.com/fwkzb9jz
Например в https://websiteforstudents.com/enabl...u-17-04-17-10/ и ещё много где оно приводится.

Что означает "?" внутри первых скобок, или иначе спрошу, к чему он относится?

Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
Ответить с цитированием
  #2  
Старый 22.09.2018, 12:56
Yury Ivliev
Guest
 
Сообщений: n/a
По умолчанию Re: вопрос по регулярному выражению

Yury Ivliev написал(а) к Victor Sudakov в Sep 18 10:34:48 по местному времени:

From: Yury Ivliev <ii@any.com.ru>

Нi, Victor!

On Sat, 22 Sep 2018 11:38:56 +0300,
Victor Sudakov <Victor.Sudakov@f49.n5005.z2.fidonet.org> wrote:
VS> Что означает "?" внутри первых скобок, или иначе спрошу, к чему
VS> он относится?
perl -a -e 'm,^/~(.+)(/.*)?$,; print "user: $1\n"'
/~qqqq/qqq/qq
user: qqqq/qqq/qq

perl -a -e 'm,^/~(.+?)(/.*)?$,; print "user: $1\n"'
/~qqqq/qqq/qq
user: qqqq

То есть "?" уменшает "вес" первой части выражения (".+").

Тут можно ещё так:
perl -a -e 'm,^/~([^/]+)(/.*)?$,; print "user: $1\n"'
/~qqqq/qqq/qq
user: qqqq
--- ifmail v.2.15dev5.4
Ответить с цитированием
  #3  
Старый 22.09.2018, 12:56
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию Re: вопрос по регулярному выражению

Eugene Grosbein написал(а) к Victor Sudakov в Sep 18 15:44:38 по местному времени:

22 сент. 2018, суббота, в 09:38 NOVT, Victor Sudakov написал(а):

VS> Для nginx на замену апачевскому mod_userdir предлагается такое решение:
VS> https://pastebin.com/fwkzb9jz
VS> Например в
VS> https://websiteforstudents.com/enabl...u-17-04-17-10/
VS> и ещё много где оно приводится.
VS> Что означает "?" внутри первых скобок, или иначе спрошу, к чему он относится?

ngnix использует не POSIX regexp, в которых .+? не является тем, что тут нужно,
он использует Perl regexp, где сочетание +? явно определено в man perlre:

By default, a quantified subpattern is "greedy", that is, it will match
as many times as possible (given a particular starting location) while
still allowing the rest of the pattern to match. If you want it to
match the minimum number of times possible, follow the quantifier with
a "?". Note that the meanings don't change, just the "greediness":

*? Match 0 or more times, not greedily
+? Match 1 or more times, not greedily
?? Match 0 or 1 time, not greedily
{n}? Match exactly n times, not greedily (redundant)
{n,}? Match at least n times, not greedily
{n,m}? Match at least n but not more than m times, not greedil

То есть, в выражении ^/~(.+?)(/.*)?$ часть (.+?) матчит нежадно и оставляет
возможный второй прямой слеш в строке второй группе скобок.
Скорее всего, жадный вариант оставлял бы всегда пустой вторую группу.

Eugene
--- slrn/1.0.3 (FreeBSD)
Ответить с цитированием
  #4  
Старый 22.09.2018, 12:56
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию Re: вопрос по регулярному выражению

Eugene Grosbein написал(а) к Yury Ivliev в Sep 18 16:06:34 по местному времени:

22 сент. 2018, суббота, в 08:34 NOVT, Yury Ivliev написал(а):

YI> Тут можно ещё так:
YI> perl -a -e 'm,^/~([^/]+)(/.*)?$,; print "user: $1\n"'
YI> /~qqqq/qqq/qq
YI> user: qqqq

Я, кстати, предпочитаю именно этот вариант, так как он
корректен и для POSIX regexp тоже.

Eugene
--- slrn/1.0.3 (FreeBSD)
Ответить с цитированием
  #5  
Старый 22.09.2018, 20:22
Alex Korchmar
Guest
 
Сообщений: n/a
По умолчанию Re: вопрос по регулярному выражению

Alex Korchmar написал(а) к Eugene Grosbein в Sep 18 19:04:01 по местному времени:

From: Alex Korchmar <noreply@linux.e-moe.ru>

Eugene Grosbein <Eugene.Grosbein@f1.n5006.z2.fidonet.org> wrote:

> То есть, в выражении ^/~(.+?)(/.*)?$ часть (.+?) матчит нежадно и оставляет
> возможный второй прямой слеш в строке второй группе скобок.
> Скорее всего, жадный вариант оставлял бы всегда пустой вторую группу.
while still allowing the rest of the pattern to match. не всегда
пустой, но всегда только последний /и то что после, все непоследние
/ и между ними достались бы первой.

но да, позиксная семантика с явным ^/ тут ничем не хуже, и непонятно, нафига
была нужна эта невнятица.


> Alex

--- ifmail v.2.15dev5.4
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 16:07. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot