s///g v kombinaci s (?<=)

David Olszyński hisaak na mendelu.cz
Pátek Září 6 00:44:40 MEST 2002


Ondrej Koala Vacha wrote:

> On Thu, 5 Sep 2002, David Olszyński wrote:
> 
>> Michal Špaček wrote:
>> 
>> Ta volba /g sice znamena "pro vsechny vyskyty", ale tim se musi myslet "pro
>> vsechny vyskyty v _puvodni_ hodnote".
>> 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.
> 
> Me to tak prijde normalni.

Co? To, co jsem napsal? To samozrejme je normalni chovani, dekuji za podporu.

> Pozadavek byl nahradit 'ba' retezcem 'a', coz se stalo.

Takovy pozadavek tu nikde nebyl.

> Ze je ten reg. vyraz takovy, ze muze generovat vysledek, ktery
> opet splnuje naroky na prave provadenou zmenu, je veci uzivatele. 

To je myslim uplny nesmysl. Uz priklad v prvnim prispevku tohoto vlakna to 
ostatne vyraci. Perl prave _nenahrazuje_ uz jednou nahrazene. Autor puvodniho 
prispevku ocekaval, ze to tak delat bude a ja se mu snazil vysvetlit, proc si 
myslim, ze to je mylna predstava.

> Ten musi
> vedet, ze je tak, a pouzit treba cyklus while. Kdyby to delal
> perl sam, pak by ho prosta zamena s/ba/ba/g uvedla do nekonecneho cyklu.

No, zdravy rozum veli, ze i kdyby to ten Perl nahrazoval primo v prohledavanem 
retezci, tak by se vzdy aspon posunul o patricny pocet znaku. Takze takto 
definitivne ne.

hisaak



Další informace o konferenci Perl