RE a utf-8
Jan Kasprzak
kas na fi.muni.cz
Čtvrtek Září 4 10:39:38 CEST 2014
Jiří Václavík wrote:
: 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
: :-)
Linefeed tam je, a dolar by ho měl matchovat bez problémů.
V tomto problém asi nebude. Podle perlre(1):
$ Match the end of the line (or before newline at the end)
(pokud teda nejsme režimu /m, což nejsme).
Ale jinak jo, echo -n taky matchuje. Bez -CSAD -Mutf8 to taky matchuje,
-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"
Další informace o konferenci Perl