#1
|
|||
|
|||
вопрос по регулярному выражению
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
|
|||
|
|||
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
|
|||
|
|||
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
|
|||
|
|||
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
|
|||
|
|||
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 |