[ rivan @ 12.09.2003. 13:21 ] @
Kako napraviti regularni izraz koji ce da tacno proveri broj pojavljivanja nekog para tagova u tekstu?
npr
$s = "<table><tr>xxx</tr><tr>yyy</tr></table>"
if ($s =~ /<table><tr>.*?</tr></table>/) {
# prolazi i ako tabela ima vise od jednog reda
}

bitno je da to bude jedan regularni izraz ako je ikako moguce (moglo bi sa while da svaki put otkida po jedan <tr>.*?</tr> par i slicno, ali to mi ne odgovara)
[ mpapec @ 15.09.2003. 20:01 ] @
Citat:
rivan:
if ($s =~ /<table><tr>.*?</tr></table>/) {
# prolazi i ako tabela ima vise od jednog reda

Jesi li siguran da ovo prolazi bez gresaka?

Ako hoces samo prebrojati <tr> redove onda,
my $s = "<table><tr>xxx</tr><tr>yyy</tr></table>";
print scalar @{[ $s =~ m!(<tr>.*?</tr>)!gis ]};
print "\n";

Vidi perldoc -f scalar za detalje, ukratko prvo se forsira list kontekst @{[ ]} pa onda scalar vrati koliko je bilo list elemenata jer bez toga regex samo vrati string koji je matchirao.

[ rivan @ 29.09.2003. 08:30 ] @
Ne radi se o tome da je potrebno uraditi jednostavno prebrojavanje <tr> tagova, vec je potrebno voditi racuna i o <td> tagovima i eventualnim tabelama koje se nalaze unutra, a hteo sam da sve bude jedan regexp da bi mogao da sve stavim u neku if {...}elsif {...} strukturu... Svejedno resio sam citav problem na drugi nacin (pisanjem f-je u C-u)

Hvala na odgovoru i korisnim informacijama

P.S.
Siguran sam da regexp koji sam naveo prolazi i ako tabela ima vise od jednog reda (vise od jednog <tr></tr> para)
[ mpapec @ 29.09.2003. 16:41 ] @
Citat:
rivan:
Ne radi se o tome da je potrebno uraditi jednostavno prebrojavanje <tr> tagova, vec je potrebno voditi racuna i o <td> tagovima i eventualnim tabelama koje se nalaze unutra, a hteo sam da sve bude jedan regexp da bi mogao da sve stavim u neku if {...}elsif


E, to je vec dosta slozenije, ima nesto o tome ali nisam bas proucavao,
http://www.perl.com/pub/a/2003/08/21/perlcookbook.html

Citat:

Siguran sam da regexp koji sam naveo prolazi i ako tabela ima vise od jednog reda (vise od jednog <tr></tr> para)


Cudno, meni kod pokretanja izbaci gresku za raj regexp.

pozdrav
[ Nemanja Jakovljevic @ 07.03.2004. 14:33 ] @
Citat:
rivan:
Kako napraviti regularni izraz koji ce da tacno proveri broj pojavljivanja nekog para tagova u tekstu?
npr
$s = "<table><tr>xxx</tr><tr>yyy</tr></table>"
if ($s =~ /<table><tr>.*?</tr></table>/) {
# prolazi i ako tabela ima vise od jednog reda
}

bitno je da to bude jedan regularni izraz ako je ikako moguce (moglo bi sa while da svaki put otkida po jedan <tr>.*?</tr> par i slicno, ali to mi ne odgovara)


mislim da bi ovo trebalo ad stoji ovako ako ti to treba:
if ((@s =~ /<table><tr>.*?</tr></table>/)==1)
[ Free_Sex @ 08.03.2004. 11:53 ] @
Samo to tvoje resenje cini mi se da ima "ogranicenu" primenu.

Recimo sve bih rekao da nebi prepoznalo kako treba ovako nesto

<table width="100%">
<tr><td colspan ... bla lba

Nije ni bitno sta vec ima. Mislim ci mti bude razlicito od <table> tebi to nece prepoznavati.

A ne znam da li je po standardu samo sto browser cini mi se da prepoznaje i ludorije tipa : <width=... table> ....mada nisam bas siguran u to ....