Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

regexp глючит?

0 views
Skip to first unread message

RockMover

unread,
Dec 11, 2006, 9:59:42 PM12/11/06
to
Привет, All!

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...

Sergei Golovan

unread,
Dec 12, 2006, 12:16:02 AM12/12/06
to
Hi, RockMover!

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

RockMover

unread,
Dec 12, 2006, 12:37:21 PM12/12/06
to
Привет!

[...]

>> 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?

0 new messages