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