RE a utf-8
Jiri Polcar
polcar na physics.muni.cz
Čtvrtek Září 4 10:15:15 CEST 2014
Jeste jedno pozorovani:
echo AB:pán | perl -CSAD -Mutf8 -ne 'print if /AB:.*án$/m'
taky matchne.
Ale nechapu, jak muze na ^ mit vliv LF na konci radky.
Jiri
2014-09-04 9:49 GMT+02:00 Jiří Václavík <jiri.vaclavik na gmail.com>:
> 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
>>
>
>
> _______________________________________________
> 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/06f634fa/attachment.html>
Další informace o konferenci Perl