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