Jak namatchovat \n na konci stringu?
Pavel Smerk
xsmerk na fi.muni.cz
Středa Listopad 5 10:22:14 CET 2008
On Wed, Nov 05, 2008 at 09:54:34AM +0100, Honza Pazdziora wrote:
> On Wed, Nov 05, 2008 at 09:43:54AM +0100, Pavel Smerk wrote:
> > On Wed, Nov 05, 2008 at 09:22:45AM +0100, Jan Kasprzak wrote:
> > > Pavel Smerk wrote:
> > > : > 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 neni ten kdo zvoli primo programator pomoci /m ?
> >
> > Tomu asi nerozumim, perl -e 'print "ab\n" =~ /^.*?(.{0,1})$/' vypise vzdy
> > "b" a nikdy "\n", nezavisle na pouzite "podmnozine" modifikatoru {/s, /m}.
> >
> > IOW, to /m v tomhle pripade nic neovlivni. Vzdy je to "before newline at the
> > end". Naproti tomu pri =~ /^.*?(.{0,})$/ se vypise budto "ab", nebo "ab\n"
> > podle toho, zda pouziju /s, /m opet nema zadny vliv, ani s /s, ani bez nej.
>
> Duvodem je zpusob, jakym je ten regularni vyraz vyhodnocovan. Ten $
> matchuje jak pred \n, tak za nim, a to matchovani vrati prvni uspesny
> match.
Jo, tohle mi to osvetlilo (priznavam, ze zbytek me na prvni pokus naopak
zmatl :-).
Diky, P.
> A /s rika, ze . nematchuje \n.
>
> V prvnim pripade se ten match hleda odleva, od nejkratsiho (.{0,1} je
> vlastne .?, a pred nim je non-greedy .*?), zatimco ve druhem pripade
> se jede od nejdelsiho (.{0,} he to same jako .*) a dela se backtrace.
Další informace o konferenci Perl