Zdravím,
věřím, že nějaký zkušený guru mi poradí, zda by nešlo následující regulární výrazy trochu zjednodušit. Potřebuji ze stránky kešky vytáhnout jména kačerů, kteří zalogovali Found it. Napsal jsem si tedy následující skriptík (viz níže). A nyní dotaz: daly by se regulární výrazy více zjednodušit (např. jen do jednoho, kratši forma atd...)? Všem díky za ochotu.
<?php
$server = "www.geocaching.com";
$port = 80;
$fp = fsockopen($server,$port);
if($fp):
@$connection=mysql_Connect("mujserver","mujnick","mojeheslo");
mysql_select_db("mojedatabaze");
fputs($fp, "GET /seek/cache_details.aspx?guid=fda96c0e-5bb8-4a45-a0f9-b19325b078de&log=y HTTP/1.1\r\nHost:www.geocaching.com\r\n\r\n");
while ($line=fgets($fp)):
if (eregi("<a name",$line)):
$line = preg_replace("/(<img src='http:\/\/www.geocaching.com\/images\/icons\/icon_enabled.gif|<img src='http:\/\/www.geocaching.com\/images\/icons\/coord_update.gif|<img src='http:\/\/www.geocaching.com\/images\/icons\/icon_maint.gif|<img src='http:\/\/www.geocaching.com\/images\/icons\/icon_greenlight.gif|<img src='http:\/\/www.geocaching.com\/images\/icons\/icon_disabled.gif|<img src='http:\/\/www.geocaching.com\/images\/icons\/icon_sad.gif|<img src='http:\/\/www.geocaching.com\/images\/icons\/icon_note.gif)[^]]+?<\/a>/i","",$line);
// nyni mam pouze logy Found it
$line = preg_replace(" /<[^<]+?>/","",$line);
//nyni jsem se zbavil vsech html tagu
$line = preg_match_all("/(?<=[[:digit:]] by )[^><]+?(?= \()/i",$line,$pole);
//nyni mam jmeno kacera (je mezi jakoukoli cislici, kterou nasleduje slovo "by", a levou kulatou zavorkou)
for($i=0;$i<count($pole[0]);$i++) {
echo $pole[0][$i]."<br/>";
mysql_query("SET character_set_results=utf8, character_set_connection=utf8, character_set_client=utf8");
mysql_query("replace into mojetabulka values ('','".html_entity_decode($pole[0][$i],ENT_QUOTES,'UTF-8')."')");
}
break;
endif;
endwhile;
endif;
echo "-----KONEC-------";
fclose($fp);
?>
Regulární výrazy pro získání jmen cacherů s logem Found it
Vytvořeno od
eMenthal
, led 29 2009 14:01
1 odpovědí na toto téma
#1
Publikováno 29 leden 2009 - 14:01
#2
Publikováno 29 leden 2009 - 15:00
Já bych se asi vykaslal na to meganahrazovani pres regularni vyrazy a rovnou vyzobaval to co hledam...
najdi reg. retezec "icon_smile.gif ... by ... xx found)"
dokud neco nachazi {
vypitvej z toho jmeno, pocet nalezu,... a nekam si to uloz
najdi dalsi
}
jenom je potreba v tom hledani mu to nejak omezovat, protoze jinak by misto ".*" asi dosadil vse mezi prnim found it a poslednim zaznamem, takze asi konstrukci tvaru "[^<]*" - musel bych se dukladneji podivat na ten zdrojak a zkusit to...
Myslim, ze touhle cestou bude kod mnohem prehlednejsi a mozna i rychlejsi.
1 uživatel(ů) prochází toto téma
0 uživatelů, 1 návštěvníků 0 anonymních uživatelů