Portál AbcLinuxu, 12. května 2025 04:42
my $html = HTML::Tree->new(); $html->parse($page); while ($html){ my ($id) = $html->look_down( 'id','o012' ); print encode_utf8($id->as_HTML ), "\n"; }Potřeboval bych pomoc s nahrazením
o012za něco jako
/o\d{3}/, aby mi při nalezení vzoru bylo toto id vypsáno.
Řešení dotazu:
/o(\d{3})/ && print $1;
look_down
podporuje notaci s reg. objektem tak, že něco jako
$html->look_down( 'id',qr{o\d{3}} )
, ale ten příklad je celý nějaký divný.
Co přesně má dělat?
ale ten příklad je celý nějaký divný.Školní zadání?
my ($id) = $tree->look_down( 'id',qr/o\d{3}/ );fungluje jak ma. Vypise prvni vyskyt podle reg.vyrazu. s Perlem zacinam uz tri mesice, chtel bych jeste v necem popostrcit jak mam toto vse zacyklovat tak aby mi to proslo pres celou stranku a vyhledalo vsechen vyskyt pomoci while mi to vypisuje jen prvni vyskyt hodnekrat zasebou
while($tree){ my ($id) = $tree->look_down( 'id',qr/o\d{3}/ ); print encode_utf8($id->as_HTML) , "\n"; }
my @id = $tree->look_down( 'id',qr{o\d{3}}xms ); foreach (@id) { say $_->as_HTML; }
m,qr,s
lze použít libovolný znak nebo závorky
tedy lze psát např. m#a.*#; s[ahoj][cau]g
atd. přičemž se doporučuje používat buď / /
nebo { }
@
na začátku je pole(array) ty si tam měl ($id)
což je list, s prvním prvkem $id
tedy si dostal sice pole, ale při porovnání se vzal jen první prvek,
což v tomto případě (a shodou okolností) je to stejné jako kdyby si tam napsal jen $id
Podobně by si mohl ($id1,$id2) dostat první dva prvky.
rozdíl mezi $id
a ($id)
lze vidět třeba tady
my @array=('a','b'); my $id = @array; my ($id)=@array;kdy v tom případě bude v
$id
počet prvků(2) a v tom druhém první prvek('a')
jenom upozorňuji, že při zápisu my $id =('a','b')
by byl v $id
poslední prvek list tedy 'b'. :)
navíc si tam měl while
přes $tree
, které se v té smyčce nemění
tak záleží čeho si chtěl dosáhnout
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.