Mailinglisten-Archive |
Hallo Alexander, Alexander Palm schrieb am Donnerstag, 28. August 2003 um 00:20: > Habe ein wenig mit RegEx rumgespielt und wie bei Heise angeboten den > NewsTicker ausgelesen. > Es funktioniert auch - wollte nur mal ne Expertenmeinung hören ob ich es > einigermaßen "sauber" gelößt habe? Ja, einigermassen ;-) Ich weiss zwar nicht, was du hören willst; der Code funktioniert ja, wie du sagst. Wie in anderer Mail schon erkannt, schreit .rdf förmlich danach via XML geparst zu werden. Wie ebenfalls bemerkt, bedeutet das sicher ein wenig mehr Code, aber zu Übungszwecken wäre das ein guter Anfang, oder? IMHO wäre das auch eine "sauberere" Lösung. Ob sich das real für die paar Zeilen von Heise lohnt, steht auf einem anderem Blatt. Zu deinem Code: ab php 4.3.x kannst du statt file(), file_get_contents() benutzen, dann sparst du dir das implode des Arrays, das dir file() zurückliefert. Wenn du ausserdem Code sparen willst, dann kannst du auf den den ersten RegExp verzichten und gleich preg_match_all verwenden. preg_match_all ("'<title>(.*?)</title>.*?<link>(.*?)</link>'si",$in_file, $matches); ich habe hier ein paar Klammern weggelassen. > > echo "<h2>".$matches[2]." <font size=\"-3\"><a > href=\"".$matches[4]."\" target=\"_blank\">(c) by HEISE</font></h2>\n"; <pedant> du hast vergessen den <a href> mit </a> zu schliessen. </pedant> Ausserdem würde ich mir angewöhnen statt " gleich einfache ' zu verwenden. sehr ordentlich schauts aus, wenn du printf ('<h2>%s</h2> <font size="-3"><a href="%s" target="_blank">(c) by HEISE</a></font></h2>'.chr(13),$matches[1][0],$matches[2][0]); schreibst. Etwas schneller gehts bei echo '<h2>'.$matches[1][0].'<font size="-3">... usw.'; > preg_match_all > ("'<item>.*?(<title>(.*?)</title>).*?(<link>(.*?)</link>).*?</item>'si", > $in_file, $matches); siehe oben, ganz so viele Klammer brauchst du nicht. Raus kommt dabei ein Array matches[0] = array(... kompletter pattern ) matches[1] = array(... titel...) matches[2] = array(... link ... ) > > for ($i=0; $i < count($matches[0]); $i++){ > echo "<li><a href=\"".$matches[4][$i]."\" target=\"_blank\">".$matches[2][$i]."</a></li>\n"; > } Hier ebenfalls besser ' verwenden statt ", dann musst du nicht jeden " escapen. Da ausserdem die Werte $matches[1][0] und $matches[2][0] für die Überschrift reserviert sind, fängst du mit 1 an zu zählen: for ($i = 1;...) Mehr fällt mir nicht dazu ein. Gruss Frank
php::bar PHP Wiki - Listenarchive