Jak namatchovat \n na konci stringu?
Pavel Smerk
xsmerk na fi.muni.cz
Úterý Listopad 4 23:36:18 CET 2008
On Tue, Nov 04, 2008 at 11:30:52PM +0100, Pavel Smerk wrote:
> 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. :-|
Jako vzdy, reseni najdu hned po odeslani mailu: staci pred $ vrazit (?!\n).
Nejasnost, proc to takto funguje a kde je to zdokumentovane, ale zustava.
P.
Další informace o konferenci Perl