Regularni vyrazy
Honza Pazdziora
adelton na informatics.muni.cz
Pondělí Srpen 21 14:01:01 MEST 2000
On Mon, Aug 21, 2000 at 12:21:00PM +0200, Vladimír Fux wrote:
>
> Chtel bych na jeden pruchod - tedy jednim prikazem
> nahradit ci spise pozmenit frazi podle prikladu:
>
> V promenne $url mam "http://www.novak.cz/"
> V textu se mohou vyskytovat takoveto fraze:
> A) "adresa=http://www.novak.cz/neco.html"
> B) "adresa=neco.html"
>
> Jak zajistit, aby v pripade B. to znamena,
> pokud za textem adresa nenasleduje obsah
> promenne $url se tam tento obsah doplnil,
> tedy aby doslo doslo k uprave textu na tvar
> "adresa=http://www.novak.cz/neco.html"
> resp. "adresa=".$url."neco.html"
>
> Myslel jsem si, ze to pujde takto:
> ..
> $text=~s/(adresa=)(^[($url.*)])/\1$url\2/gi;
Problem je v tomto. [] je trida znaku. Tedy [http://www/] znamena jeden
znak z mnoziny hptw:/ a ne ten retezec http://www/.
Muze Vam pomoci tzv. lookahead, kterym jste schopen se zeptat, zda tam
je ci neni dany retezec:
(?= .... ) pozitivni -- dany vyraz nasleduje
(?! .... ) negativni -- dany vyraz nenasleduje
Vice viz. perldoc perlre (a je potreba rozumne novy Perl).
Cili muj prvni pokus by byl
s/(adresa=)(?!\Q$url\E)/\1$url/gi;
Proc tam je to \Q a \E vysvetluje perldoc perlop -- prevdepodobne
nechcete, aby obsah $url byl chapan jako regularni vyraz, ale jako
podretezec.
Doufam, ze to pomuze.
--
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
.project: Perl, DBI, Oracle, MySQL, auth. WWW servers, MTB, Spain, ...
------------------------------------------------------------------------
Další informace o konferenci Perl