Thread Regexp 32 Bit Limitierung (14 answers)
Opened by bloonix at 2006-10-20 15:52

betterworld
 2006-10-20 18:22
#71053 #71053
User since
2003-08-21
2614 articles
ModeratorIn

user image
[quote=renee,20.10.2006, 14:14]
Code: (dl )
1
2
3
4
my $string = 'a' x 50_000 . 'skjd';
my $regexp = qr-^((.){32000}\2{18000})skjd$-;

print "yes\n" if $string =~ /$regexp/;


Edit: natürlich geht'ts noch einfacher:
Code: (dl )
my $regexp = qr-^((.{25000}){2})skjd$-;
[/quote]
Dein erster Ausdruck tut nicht, was Du moechtest, glaube ich. Das liegt daran, dass \2 sich nicht auf den regulaeren Ausdruck (.) bezieht, sondern nur auf den exakten String, den (.) gematcht hat. Es muessten also alle 18001 Zeichen von der 32000ten bis zur 50000ten Stelle gleich sein. (Das ist in Deinem Beispiel der Fall, aber im allgemeinen nicht.)

Vergleiche die folgenden beiden Beispiele:
Code: (dl )
1
2
print "yes0\n" if 'hallooo' =~ /^((.){2}\2{2})/; # Gibt nichts aus
print "yes1\n" if 'haaallo' =~ /^((.){2}\2{2})/; # Gibt yes1 aus
\n\n

<!--EDIT|betterworld|1161354287-->

View full thread Regexp 32 Bit Limitierung