"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

regex

kleinerChemiker 07.01.2004 - 12:44 527 9
Posts

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4282
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 &nbsp><td>Ermalion</td><!-- <td>%TOWNLIST%</td></tr>--><tr bgcolor="#E8E8E8"><td>Stefanie del Sarol</td><!-- <td>%TOWNLIST%</td></tr>--><tr &nbsp><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);

allerdings habe ich da nur folgende ausgabe:
Code:
Array
(
    [0] => <td>Syndia</td><!-- <td>%TOWNLIST%</td>
    [1] => a
)

tia

MIK

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4282
gute idee, ans wegschneiden hab ich nicht gedacht

thx

MIK

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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);
?>
Bearbeitet von atrox am 07.01.2004, 13:28

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4282
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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
sollte kein problem sein

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4282
supper :)

kleinerChemiker

Here to stay
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4282
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)
Registered: Sep 2000
Location: Vienna / SF
Posts: 6131
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
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4282
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
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz