RE a utf-8
Jiří Václavík
jiri.vaclavik na gmail.com
Čtvrtek Září 4 09:49:14 CEST 2014
Ahoj,
podle debugu regularnich vyrazu to cele selze uz v optimalizacni fazi, kdy
se matchuji pevne retezce, viz:
echo AB:pán | perl -CSAD -Mutf8 -Mre=debugcolor -ne 'print if /AB:.*án$/'
Compiling REx "AB:.*%x{e1}n$"
Final program:
1: EXACT <AB:> (3)
3: STAR (5)
4: REG_ANY (0)
5: EXACT <\x{e1}n> (7)
7: EOL (8)
8: END (0)
anchored utf8 "AB:" at 0 floating utf8 "%x{e1}n"$ at 3..2147483647
(checking anchored) minlen 5
Guessing start of match in sv for REx "AB:.*%x{e1}n$" against
"AB:p%x{e1}n%n"
UTF-8 pattern and string...
Found anchored substr "AB:" at offset 0...
Contradicts floating substr "%x{e1}n"$, giving up...
Match rejected by optimizer
Freeing REx: "AB:.*%x{e1}n$"
To n na konci "%x{e1}n" je nejake divne. Clovek nikdy nevi, co za retezec
nakonec dorazi, tak se na to podivejme:
echo 'AB:pán' | perl -ne 'print join " ", map{ord} split m{}xms'
65 66 58 112 195 161 110 10
Ha, vypada to, ze je tam LINEFEED navic. Takze problem neni v perlu, ale v
prikazu echo, ktery ho tam automaticky prida, kdyz neni volan s volbou -n
:-)
Zdravi
j. v.
Dne 4. září 2014 8:49 Jan Kasprzak <kas na fi.muni.cz> napsal(a):
> Pavel Smerk wrote:
> : Ahoj vespolek,
> :
> : asi mám nějaké zatmění mysli: proč druhý příkaz nic nevypíše? Stejně tak
> se
> : to chová i v perl 5.10, naopak novější nemám k dispozici.
>
> 5.8 a 5.18 se chová stejně. Na locale by to nemělo záviset, pokud
> nedáš
> -Mlocale (i s LC_ALL=C se to chová stejně). Ještě jsem ověřil, že se to
> chová
> stejně divně i pro jiné kategorie znaků:
>
> $ echo AB:pスn | perl -Mutf8 -CSAD -ne 'print if /AB:.*スn$/'
>
> kromě ascii, ovšem:
>
> $ echo AB:pan | perl -Mutf8 -CSAD -ne 'print if /AB:.*an$/'
> AB:pan
>
> a že součástí problému může být struktura toho RE:
>
> $ echo AB:pán | perl -Mutf8 -CSAD -ne 'print if /AB[:x].*án$/'
> AB:pán
> $ echo AB:pán | perl -Mutf8 -CSAD -ne 'print if /A[BC]:.*án$/'
> AB:pán
>
> naopak v -Mutf8 -CSAD problém není - když to nahradím za use utf8 a
> podobně,
> tak se to chová stejně.
>
> Moc jsem nepomohl, sorry.
>
> -Y.
>
> --
> | Jan "Yenya" Kasprzak <kas at {fi.muni.cz - work | yenya.net -
> private}> |
> | New GPG 4096R/A45477D5 -- see
> http://www.fi.muni.cz/~kas/pgp-rollover.txt |
> | http://www.fi.muni.cz/~kas/ Journal:
> http://www.fi.muni.cz/~kas/blog/ |
> Hatsune Miku: the only girl that can have a leek in a song called "Bad
> Apple"
> _______________________________________________
> Perl mailing list
> Perl na mailman.muni.cz
> https://mailman.muni.cz/mailman/listinfo/perl
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <https://mailman.muni.cz/pipermail/perl/attachments/20140904/8e32106e/attachment.html>
Další informace o konferenci Perl