Rozdil u s///?
Honza Pazdziora
adelton na informatics.muni.cz
Čtvrtek Březen 19 18:11:36 MET 1998
> No ne ze by to primo padalo, ale nefunguje to korektne :
>
> while ($radek =~ s/^(.*?)<.*?>(.*)$/$1$2/) {};
>
> $radek je jeden radek z nejakeho *.html souboru, kde chci odstranit znacky.
> No a kdyz jsem pouzil s///g, tak mi to ignorovalo i veskery text mezi
> znackami.
No to snad ne, prvni znacku na radku by to s /g melo zrusit spravne.
Podivejme se, co ten Vas regexp dela: ma matchovat zacatek retezce,
potom neco, potom teda tu znacku a pak vsechno az do konce. So far so
good. Cili v prvnim whilu to matchuje od zacatku pres prvni znacku az
do konce, znacku vyhodi. Ve druhem pruchodu od zacatku pres to misto,
kde byla ta prvni znacka, az po dalsi znacku a pres ni az do konce.
A tak dal.
A ted co se stane, kdyz tam date /g. No, namatchuje od zacatku pres
znacku az do konce, znacku vyhodi, a ... skonci. Global match jede od
zacatku do konce. Pokud dosahne konce, nema duvod predpokladat, ze se
da jeste neco najit a skonci.
Reseni? Pouzit jiny regexp, a to presne ten, o kterem uz jste psal:
$radek =~ s/<.*?>//g;
Je to jednodussi a hlavne rychlejsi. Podstatne na tom je, ze tam neni
^ a $, protoze my proste chceme, aby ta substituce prosla postupne
cely retezec (pokracuje vzdy tam, kde predtim skoncila) a vyhodila to,
co je mezi skobkama.
Jinak, co se tyce matchovani HTML, doporucuji podivat se do
man perlfaq9
cast How do I remove HTML from a string?
Doufam, ze to pomuze,
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
I can take or leave it if I please
------------------------------------------------------------------------
Další informace o konferenci Perl