[ ljuba @ 30.12.2001. 22:41 ] @
Cao svima,

Opet ja sa mojim regularnim izrazima ali sam malo napredovao iako i dalje pojma nemam :)))

Trebam da iz celog HTML fajla pokupim <a href ...> tagove i to da uzmem adresu i da uzmem ono sto pise na linku ... Nesto kao:

$link[0] = "http://www.yahoo.com"
$data[0] = "Link to yahoo"
$link[1] = "/testurl/test.htm"
$data[1] = "Link internal"

ili

$link[0][0] = "http://www.yahoo.com"
$link[0][1] = "Link to yahoo"
$link[1][0] = "/testurl/test.htm"
$link[1][1] = "Link internal"

Ovo su neka pocetnicka resenja koja ne rade ... moze li koja pomoc?

page.html:

<html>
<body>
<a href="http://www.yahoo.com">Link to yahoo</a><br><br>
fdsjakljsdflkajsdflkjsadfkasjdflkasjdfkajsdf<br><br>
test <br><br>
test <br><br>
<a href="/testurl/test.htm">Link internal </a> <br><br>
sdkfjlasfdj <br><br>
</body>
</html>

Pocetnicki index.php: (izbaci gomilu gluposti)

<?php
echo "starting";
$text_native = implode ("", file("page.html"));
ereg("<a href=(.+)", $text_native, $link);
ereg(">(.+)</a>", $text_native, $data);
for ($i = 0;$i < count($data);$i++) {
echo "<br>link: ".$link[$i];
echo "data: ".$data[$i];
}
?>

'Izlet u nepoznato' index.php: (ispise samo starting a ako probam drugacije da ispisem ispisuje rec 'array' za svaku stvar koju je kao 'uhvatio')

<?php
echo "starting";
$text_native = implode ("", file("page.html"));
if (preg_match_all('!<a\s+href="((?>[^"]+))">((?>[^<]*))</a>!iU', $text_native, $matches))
{
print_r($files);
}
?>

Hvala unapred

LJUBA
[ RAZZLEDAZZLER @ 06.01.2002. 01:29 ] @
ljuba nudi ljubav...

ovaj, evo ti me "natera" da pochnem da uchim ove regular expressions ... nije loshe, samo 'oce izgleda glava da zaboli od toga
Evo, nashao sam da kazem delimichno reshenje ... shto se tiche ovog tvog page.html u njemu ce sve lepo da nadje i ispishe
...evo sada koda, pa posle toga slede problemi i pitanja

<?php
echo "starting<br><br><br>";
$text_native = implode ("", file("page.html"));

if (preg_match_all("/<a\s+href=\"([^\"]+)\">([^<]+)/", $text_native, $matches))
{

for ($i=0; $i < count($matches[0]); $i++) {
echo "Link: " . $matches[1][$i] . "<br>Data: " . $matches[2][$i] . "<br>--------------<br>";
}

}
?>

Mozda nije najnormalnije uradjen ovaj regexp deo, ali tek sam pocheo sa ovim da se koljem nocas prvi put

E sada, kao shto rekoh u ovom tvom primeru ce sve ok da odradi, ali recimo ako se u data delu nadje znak "<" onda se zaglupi i stane tu [recimo kada bi pisalo Link to < yahoo, u data delu ce ispisati samo Link to]. Znam ja zbog chega je to, ali nisam provalio kako da predjem preko toga, tako da sam za sada stavio da kada naidje na "<" stane.

Umesto onoga pred kraj [^<] , treba da stoji neshto kao [^<\/a>] , znachi kada naidje na </a> da stane, ali on u stvari kada naidje ne bilo koji od tih znaka [< ili / ili a ili >] on staje. Jel moze neko ko je iskusniji sa ovim da mi kaze kako to da sredim?

Da ne zaboravim, ako sam lupio neku zeshcu glupost, nemojte drvlje i kamenje, tek pocheh ovo da uchim, samo josh treba u startu da me pokopa neko
[ RAZZLEDAZZLER @ 18.03.2002. 17:15 ] @
Ala sam iskopao topic, svaka mi chast
Evo sada gledam ovaj topic i gle chuda, znam reshenje [nauchilo se svashta od 6. januara]
Evo koda koji ce da radi iako u data delu nadje znak "<";

<?php
echo "starting<br><br><br>";
$text_native = implode ("", file("page.html"));


if (preg_match_all("|<a\s+href=\"([^\"]+)\">(.*)</a>|", $text_native, $matches, PREG_SET_ORDER)) {
while ($print = each($matches)) {
echo "Link: " . $print[1][1] . "<br>Data: " . $print[1][2] . "<br>--------------<br>";
}

}
?>


I opet sam pobedio ... (game boy)