Jak namatchovat \n na konci stringu?
Pavel Smerk
xsmerk na fi.muni.cz
Úterý Listopad 4 23:30:52 CET 2008
Ahoj vespolek,
$ ~/perl/bin/perl -v
This is perl, v5.10.0 built for i686-linux
$ ~/perl/bin/perl -e 'print "ab\n" =~ /^.*?(.{0,1})$/s'
b$ ~/perl/bin/perl -e 'print "ab\n" =~ /^.*?(.{0,})$/s'
ab
$
Stejne se to chova s \Z misto $, stejne tak ve starsich verzich perlu.
Proc mi prvni priklad misto konce radku namatchuje znak pred nim? V man
perlre se o $ pise, ze matchuje "only the end (or before the newline at the
end)". Podobne \Z "only at end of string, or before newline at the end".
Co znamena to "or"? Podle ceho se perl rozhodne, kterou z tech dvou variant
zvoli? Jak muzu rict, ze chci "at end of string", a nikoli "before newline
at the end"?
A co vic, jaktoze to pro .* (coz ma byt ekvivalent .{0,}) matchuje "at end
of string", ale pro .{0,1} "before newline at the end", aniz by bylo takto
rozdilne chovani zmineno v casti o kvantifikatorech? Nebo jsem neco
prehledl?
Diky predem za pripadne nakopnuti; nejenze mi kvuli tomu nefunguje skript,
ale ani nevim, jak ho rozumne opravit. :-|
P.
Další informace o konferenci Perl