Přejít na obsah


Fotka
- - - - -

Regulární výrazy pro získání jmen cacherů s logem Found it


  • Pokud chcete vložit odpověď, přihlašte se
1 odpovědí na toto téma

#1 eMenthal

eMenthal

    Advanced Member

  • Members
  • PipPipPip
  • 78 příspěvků(y)

Publikováno 29 leden 2009 - 14:01

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);
?>
  • 0

#2 kamilek

kamilek

    Advanced Member

  • Members
  • PipPipPip
  • 50 příspěvků(y)

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.
  • 0




0 uživatel(ů) prochází toto téma

0 uživatelů, 0 návštěvníků 0 anonymních uživatelů

Reklama