tclsh8.4 [~] set a {bbb:456}
bbb:456
tclsh8.4 [~] regexp {b+?:(\d+)} $a m m1
1
tclsh8.4 [~] puts $m1
4
Одинаково в 8.4 и 8.3, в виндовом 8.3 так же.
PS. Для проверки:
~$ echo 'print "$1\n" if "bbb:456" =~ /b+?:(\d+)/;' |perl
456
WBR, RockMover
I am The Master of Flame...
On 2006-12-12, RockMover <rmo...@aport.ru> wrote:
> Привет, All!
>
> tclsh8.4 [~] set a {bbb:456}
> bbb:456
> tclsh8.4 [~] regexp {b+?:(\d+)} $a m m1
> 1
> tclsh8.4 [~] puts $m1
> 4
Во всяком случае, такое поведение документировано. Цитата из re_syntax:
"A branch has the same preference as the first
quantified atom in it which has a preference."
Соответственно, первый квантификатор отключил жадность для всего
регулярного выражения. Но выглядит странно.
Best wishes!
--
Sergei 'TeopeTuK' Golovan
[...]
>> tclsh8.4 [~] set a {bbb:456}
>> bbb:456
>> tclsh8.4 [~] regexp {b+?:(\d+)} $a m m1
>> 1
>> tclsh8.4 [~] puts $m1
>> 4
SG> Во всяком случае, такое поведение документировано. Цитата из re_syntax:
SG> "A branch has the same preference as the first
SG> quantified atom in it which has a preference."
Спасибо, теперь понял. Раньше не мог понять (или поверить ;-),
что эта фраза значит.
SG> Соответственно, первый квантификатор отключил жадность для всего
SG> регулярного выражения. Но выглядит странно.
Угу. Даже хуже, чем странно. И это при том, что в основном
все похоже на pcre. Вот так работает:
tclsh8.4 [~] set a {bbb:456}
bbb:456
tclsh8.4 [~] regexp {b{1,1}b*?:(\d+)} $a m m1
1
tclsh8.4 [~] puts $m1
456
Но неужели же это нормальный способ использовать non-greedy
quantifiers, чтоб они были side-effect-free?