Pomoc oko Regularnih izraza

2

Pomoc oko Regularnih izraza

offline
  • igor86  Male
  • Stručni saradnik
    Web programiranje
  • Pridružio: 24 Maj 2006
  • Poruke: 1633

Evo ga izraz samo obrati paznju da google mjenja js pa vise ne stoji "...rwt(this..." vec "...clk(this.href...", a moze bez toga tako da ti ovaj izraz izvlaci i to.

"/<h2 class=r><a href=\"(.*?)\" class=l+( onmousedown=\"return (.*?)\((.*?),'(.*?)','(.*?)','(.*?)','(.*?)','(.*?)'\)\")?>(.*?)<\/a><\/h2>/"

znaci

<?php $url = "http://www.google.com/search?q=link:www.elitesecurity.org&hl=en&num=42"; $v = file_get_contents($url); preg_match_all("/<h2 class=r><a href=\"(.*?)\" class=l+( onmousedown=\"return (.*?)\((.*?),'(.*?)','(.*?)','(.*?)','(.*?)','(.*?)'\)\")?>(.*?)<\/a><\/h2>/",$v,$r); foreach($r[1] as $int => $link)    print "<a href='{$link}'>{$r[10][$int]}</a><br>"; ?>



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 05 Nov 2007
  • Poruke: 21
  • Gde živiš: Malta

Konacno sam nahvatao Linux/Perl/... administratora u firmi i ubi covek skript za 10 minuta Neutral

Evo resenje pa kome treba nek uzme. Sta mislite o resenju?

PS: Nemojte da odkomentarisete zakomentarisani red da vam ne rokne IE/FF Smile

<?php

function getpage($url) {
$data = file_get_contents($url);
$nummatches = preg_match_all("/<h2 class=r><a href=\"([^\"]+)\" class=l>(.+?)<\/a><\/h2>.*?<font size=-1>(.+?)<br><span class=a>/i", $data, $matches);
$numresults = preg_match("/Results <b>([0-9]+)<\/b>.*?<b>([0-9]+)<\/b> of about <b>([0-9,]+)<\/b> linking to/i", $data, $resmatches);

echo "start: ".$resmatches[1]."\n<br/>";
echo "end: ".$resmatches[2]."\n<br/>";
echo "total number of results: ".$resmatches[3]."\n<br/>";

if (preg_match("/<a href=\"([^\"]+)\"><img src=\/intl\/en\/nav_next.gif width=100 height=26 alt=\"\" border=0><br>Next<\/a>/i", $data, $nextmatch)) {
echo "<br/>Next link: ".$nextmatch[1]."\n<br/><br/>";
}

echo "$nummatches matches\n\n<br/><br/>";

for ($i = 0; $i < $nummatches; $i++) {
echo "title: ".$matches[2][$i]."\n<br/>link: ".$matches[1][$i]."\n<br/>";
echo "descr: ".$matches[3][$i]."\n<br/>\n<br/>";
}

if (isset($nextmatch[1])) {
// getpage("http://www.google.com".$nextmatch[1]);
}

}

function searchdetails($site) {
$url = "http://www.google.com/search?q=link:$site&hl=en&num=42";
getpage($url);
}

searchdetails("www.elitesecurity.org");

?>

Dopuna: 06 Nov 2007 14:43

Hvala svima. Nadam se da ce ovaj topic koristiti i drugima



offline
  • Pridružio: 24 Mar 2004
  • Poruke: 3962
  • Gde živiš: Zemun

probao sam ovaj program sa slike ali mi nesto ne ide....
trebali bi mi ovi divovi sa rezultatima...
http://www.google.com/search?hl=en&q=a

mogu li ih preko reg izvuci u promenljive

offline
  • Blood  Male
  • Ugledni građanin
  • Pridružio: 26 Jul 2003
  • Poruke: 384
  • Gde živiš: Beograd

$url = "http://www.google.com/search?hl=en&q=a"; $v = file_get_contents($url); preg_match_all('{<div class=g>(.*?)</div>}',$v,$r); $i = 0; while ($i < count($r[0])) {     $adresa1 = ($r[0][$i]) ? $r[0][$i] : '0';     echo $i+1 . ":<br>" . $adresa1 . "<br>\n";     $i++; };

offline
  • Pridružio: 24 Mar 2004
  • Poruke: 3962
  • Gde živiš: Zemun

@Blood
svaka cast i ziv bio Smile

nego ovako imam samo jedan problem (moja greska sto nisam mozda napomenuo).

trebaju mi i linkovi koji su u
<div class=g style="margin-left:2.5em">
evo primer kako to i izgleda (fokusiran lik sadrzi style="margin-left:2.5em" u div tagu


ako ti nije preveliki cim da mi preradis ovo... znacilo bi mi.
tnx

Dopuna: 06 Nov 2007 22:10

p.s.
dodatni problem moze biti sto se taj
<div class=g style="margin-left:2.5em"> nalazi u okviru glavnog diva
<div class=g>

ne znam koliko je ovo izvodljivo sad

offline
  • Blood  Male
  • Ugledni građanin
  • Pridružio: 26 Jul 2003
  • Poruke: 384
  • Gde živiš: Beograd

$url = "http://www.google.com/search?hl=en&q=a"; $v = file_get_contents($url); preg_match_all('{<div class=g.*?>(.*?)</div>}',$v,$r); $i = 0; while ($i < count($r[0])) {     $adresa1 = ($r[0][$i]) ? $r[0][$i] : '0';     echo $i+1 . ":<br>" . $adresa1 . "<br>\n";     $i++; };

offline
  • Pridružio: 24 Mar 2004
  • Poruke: 3962
  • Gde živiš: Zemun

lol
a ja sam probao sa

preg_match_all('{<div class=g .*?>(.*?)</div>}',$v,$r);

jedina razlika je sto sam stavio space Sad

hvala puno blood

offline
  • Bojan  Male
  • Prijatelj foruma
  • Pridružio: 13 Nov 2003
  • Poruke: 11059
  • Gde živiš: Novi Sad

Ala ovaj Blood razbija Smile

offline
  • Pridružio: 05 Nov 2007
  • Poruke: 21
  • Gde živiš: Malta

Imam 2 kratka pitanja:

Pitanje 1. Za sledeci kod:

<li id="li5" class="yscheven no1" onmouseover="javascript:liOver(this,5)" onmouseout="javascript:liOut(this,5)"> <a class="yschttl" href="http://rds.yahoo.com/blog/razno/countposts-v-10-wordpress-plugin/">CountPosts v 1.0 - WordPress Plugin - Ðukijev blog</a> <address class="no1">   <span id="rslt1details5" class="ysrsltsdetails" style="position:inherit;display:none;"><span><a href='http://rds.yahoo.com/sitereg?.scrumb=0&amp;crumb=&amp;txtSiteUrl=http%3A%2F%2Fdjuki.padrino.rs%2Fblog%2Frazno%2Fcountposts-v-10-wordpress-plugin%2F&amp;btnRegSite'>Authenticate itd itd

Imam regularni izraz: (.*)\btxtSiteUrl=(.*)&amp;

Koji mi vrati:

<span id="rslt1details5" class="ysrsltsdetails" style="position:inherit;display:none;"><span><a href='http://rds.yahoo.com/sitereg?.scrumb=0&amp;crumb=&amp;txtSiteUrl=http%3A%2F%2Fdjuki.padrino.rs%2Fblog%2Frazno%2Fcountposts-v-10-wordpress-plugin%2F&amp;

Znaci nece da ovaj (.*) ode jos gore (a po meni bi trebalo da ode Smile) da bih osim linka uhvatio i onaj text COUNTPOST...

Probao sam nesto ovako:
">(.*)<\/a>(.*)\btxtSiteUrl=(.*)&amp;
da bih uhvatio taj text ispred </a> pa onda 'bas me briga' pa txtSiteUrl= i onda da uhvatim link i na kraju da je &amp; Ali nece da radi ... U cemu je greska? Kako da mu kazem da se ne osvrce na nove redove i ne stane na kraju tog reda?

Pitanje 2:

Napravio sam parser u PHP (nemojte se smejati jer je pocetnicko resenje Smile) koji iz pomenutog koda izvlaci te podatke:

$nummatches = preg_match_all("/<a class=\"yschttl\" href=\"[^\"]+\">(.*?)<\/a>([^\"]+)=([^\=]+)=([^\=]+)=([^\=]+)=([^\=]+)=([^\=]+)=([^\=]+)=([^\=]+)=(.*?)&amp;/i", $data, $matches);

I to lepo meni ispisuje parametar 1 i parametar 10 - tacno sto hocu. Znam da sam mogao da nestavljam te zagrade pa bih imao samo 2 parametra ali posto sam nesto poceo da kontam o RE tek juce - neka zagrada tu inace cu se pogubiti skroz.

Podpitanje 1: Da li ovaj RE radi sporije zbog te gomile parametara koje vracam? Da li bi radio brze da sam imao samo 2 parametra?
Podpitanje 2: U mom resenju imam 7 puta ([^\=]+)= ... Da li se to nekako moze skratiti i da mu dam {7} iza tog koda?

Hvala

Pozdrav

Ljuba

offline
  • Pridružio: 24 Mar 2004
  • Poruke: 3962
  • Gde živiš: Zemun

ljuba973 ::
Podpitanje 1: Da li ovaj RE radi sporije zbog te gomile parametara koje vracam? Da li bi radio brze da sam imao samo 2 parametra?


mozes li da testiras ?
ja sam testirao i gledao razlike....
strpas to u for petlju da odradi jedno 20-ak puta (ili vise zavisi koliko je potrebno da se izvali razlika) i vidis koji ce brze da se zavrsi Smile

Ko je trenutno na forumu
 

Ukupno su 1067 korisnika na forumu :: 51 registrovanih, 9 sakrivenih i 1007 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: -[CoA]-, 357magnum, A.R.Chafee.Jr., babaroga, bojankrstc, Brana01, cifra, crnitrn, dankisha, DENIRO, Dimitrise93, Doca, doktor1964, DonRumataEstorski, Duh sa sekirom, Dukelander, Georgius, hooraay, ILGromovnik, kinez88, kobaja77, krkalon, Kure126-7, KUZMAR, Kvazar, kybonacci, Lieutenant, Metanoja, MiroslavD, mkukoleca, Motocar, nemkea71, opt1, panzerwaffe, pein, raketaš, royst33, S2M, sabros, sap, Sir Budimir, slonic_tonic, Smajser, srbijaiznadsvega, stalja, tmanda323, voja64, Zi0mek, zicko.spacek, Čivi, 79693