regex
kleinerChemiker 07.01.2004 - 12:44 527 9
kleinerChemiker
Here to stay
|
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: $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);
allerdings habe ich da nur folgende ausgabe: Array
(
[0] => <td>Syndia</td><!-- <td>%TOWNLIST%</td>
[1] => a
)
tia MIK
|
atrox
in fairy dust... I trust!
|
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.
|
kleinerChemiker
Here to stay
|
gute idee, ans wegschneiden hab ich nicht gedacht
thx
MIK
|
atrox
in fairy dust... I trust!
|
quick'n'dirty hack; no complains about style nor optimization: <?
$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);
?>
Bearbeitet von atrox am 07.01.2004, 13:28
|
kleinerChemiker
Here to stay
|
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
|
atrox
in fairy dust... I trust!
|
sollte kein problem sein
|
kleinerChemiker
Here to stay
|
supper
|
kleinerChemiker
Here to stay
|
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
Bearbeitet von kleinerChemiker am 07.01.2004, 17:23
|
funka
Legend ex-prophet(down below)
|
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
|
kleinerChemiker
Here to stay
|
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
|