s///g v kombinaci s (?<=)
Michal ©paček
skim na deltaes.cz
Pátek Září 6 13:05:27 MEST 2002
On Thu, Sep 05, 2002 at 08:26:44PM +0200, David Olszyński wrote:
> Michal ©paček wrote:
Zdravim
> > On Thu, Sep 05, 2002 at 11:24:59AM +0200, Pavel ©merk wrote:
> > ahoj
> >> $ perl -e '$a = "baa\n"; $a =~ s/(?<=b)a/b/g; print $a'
> >> bba
> >> Ocekaval jsem vystup bbb, myslel jsem si, ze nejprve se nahradi prvni a
> >> a pak druhe a, kdyz to chci "Replace globally, i.e., all occurrences."
> >> Jak tohle funguje a kde se o tom da docist (v perlre a perlop jsem nic
> >> nenasel) -- perl si ten retezec nemeni pod rukama? Mel jsem za to, ze
> >> (zhruba a vagne receno) se posunuje po retezci, pokud najde match,
> >> nahradi a hleda dalsi match od mista, kde skoncil minuly, tady to ale
> >> vypada, jako by to hledal na nejake RO kopii.
> > Ja myslim, ze je to spravne, protoze on vybira "b", ktere nasleduje
> > "a" pricemz to "a" nahradi. A potom uz nenajde dalsi "b", takze nemuze najit
> > ani nasledujici "a".
> >
> > perl -e '$a = "baba\n"; $a =~ s/(?<=b)a/b/g; print $a'
> > bbbb
> Spravne to je urcite, ale to zduvodneni mi dobre nepripada. Hleda se "a",
> kteremu predchazi "b" a ne naopak.
Ano mate pravdu, spatne jsem si to precetl :-(
> Ta volba /g sice znamena "pro vsechny vyskyty", ale tim se musi myslet "pro
> vsechny vyskyty v _puvodni_ hodnote".
Vyskyty v puvodni hodnote? Jsem puvodne myslel, ze by to bylo divne,
ale je to tak urcite, protoze:
[skim]$ perl -e '$a = "bbb\n"; $a =~ s/(?<=b)b/c/g; print $a'
bcc
> Podle me se to proste nemuze delat "in place", protoze treba vec jako
> $ perl -e '$a = "baa\n"; $a =~ s/(?<=b)/b/g; print "$a\n"'
> by pak asi generovala sama "b" a nikoliv "bbaa", jak je tomu ve
> skutecnosti.
No bylo by to rekurzivni a to asi neni uloha regularnich vyrazu :-)
> Ja si to vzdy predstavoval tak, ze se nejdriv najdou vsechny shody a na konci
> se vsechno najednou nahradi (i kdyz takto to Perl nejspis nedela, nevim).
To by byla blbost, protoze by to bylo horsi s hlediska vykonu {alokace
pameti apod.}
skim
--
---------------------------------------------------
Michal "sKim" ©paček Brno, CZ, Europe
e-mail: skim na deltaes.com user: debian, TeX
jabber, e-mail: skim na njs.netlab.cz
------=[ #!/usr/bin/perl ]=------------------------
Daląí informace o konferenci Perl