URL: https://www.overclockers.at/coding-stuff/regex_103362/page_1 - zur Vollversion wechseln!
ich will ein html-file durchsuchen, in dem eine zeile enthalten ist, die so aussieht:
<tr bgcolor="#E8E8E8"><td>Syndia</td><!-- <td>%TOWNLIST%</td></tr>--><tr  ><td>Ermalion</td><!-- <td>%TOWNLIST%</td></tr>--><tr bgcolor="#E8E8E8"><td>Stefanie del Sarol</td><!-- <td>%TOWNLIST%</td></tr>--><tr  ><td>Ragar Bearclaw</td><!-- <td>%TOWNLIST%</td></tr>--><tr bgcolor="#E8E8E8"><td>Aramis Tibaut</td><!-- <td>%TOWNLIST%</td></tr>-->
die namen ändern sich und die zeile ist unterschiedlich lang, je nach anzahl der namen, da es ein status eines online-games ist.
ich will nur die namen haben. deshalb hab ich mal folgendes versucht:
Code: PHP$status_datei = fopen ("http://www.oldworld.de/?page=status", "r"); while (!feof ($status_datei)) { $status_zeile = fgets ($status_datei); ereg ("<td>([[:alnum:]])*</td><!-- <td>\%TOWNLIST\%</td>", $status_zeile, $status_liste); } fclose ($status_datei); print_r ($status_liste);
Code:Array ( [0] => <td>Syndia</td><!-- <td>%TOWNLIST%</td> [1] => a )
da du offenbar die client-liste extrahieren willst, würde ich anders vorgehen - in etwa so:
du ladest die ganze seite in einen string, schneidest alles vor der tabelle, und danach weg (oder du machst es so wie hier mit schleife, oder noch ganz anders), entfernst alle tags ausser den <TD> durch eine regular expression (preg_replace) und verwendest dann 'explode()' um die durch <TD> getrennten strings in ein array zu bekommen.
gute idee, ans wegschneiden hab ich nicht gedacht
thx
MIK
quick'n'dirty hack; no complains about style nor optimization:
Code:<? $str=implode("",file("http://www.oldworld.de/?page=status")); // alles vor der tabelle entfernen $str= preg_replace('/^.*<strong>Clients<\/strong>/sm',"",$str); // alles nach der tabelle entfernen $str= preg_replace('/\<\/table\>.*$/sm',"",$str); // tabelle bereinigen $str= preg_replace('/(<!--[^-]*-->)|(<tr[^>]*>)|(<\/[^>]*>)|(\n)/smi',"",$str); $str= preg_replace('/^.*<td>/Usm',"",$str); echo $str; echo "<HR>"; // array mit spielern ersellen $players=explode("<td>",$str); print_r($players); ?>
super, danke
ich versteh zwar kaum, was der ganze regex-code bei dir bedeutet, aber es funzt genau so, wie ich es gerne hätte
nur eine kleine frage am rande: die namen können auch folgende zeichen enthalten: [ ] '
macht das was?
MIK
sollte kein problem sein
supper
noch eine regex frage
überprüfung ob korrekte email:
([0-9a-zA-Z\.-])+@([0-9a-zA-Z\.-])+\.[a-zA-Z]{2,4}
richtig zusammengesetzt?
tia
MIK
email ist eines der beispiele die man in die perversion genau betreiben kann
aehnliches sind urls
hab mal eine a4 regex fuer urls gesehen
was heraussticht ist das in der char class noch _ und (afaik) % fehlt
weiters kannst die die klammern vorm + sparen da du es vermutlich nicht fetchen willst
weiters kannst auch statt a-zA-Z auch a-z sagen und den modifikator i verwenden (ausserhalb der delimiters (zb /regex/i)
wie gesagt kann mans noch in die perversion genauer machen - zb fangen domains oder hosts nicht mit einem - an koennten aber auch ips sein
etc etc
thx
jaja, regex sind eine welt für sich *g* und was bringt es, wenn ich ne a4 seite regex für ne mail hab? nix, weil ich immer noch nicht weiß, obs die überhaupt gibt *g*
MIK
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025