regex

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/regex_103362/page_1 - zur Vollversion wechseln!


kleinerChemiker schrieb am 07.01.2004 um 12:44

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 schrieb am 07.01.2004 um 12:56

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 schrieb am 07.01.2004 um 13:01

gute idee, ans wegschneiden hab ich nicht gedacht

thx

MIK


atrox schrieb am 07.01.2004 um 13:24

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


kleinerChemiker schrieb am 07.01.2004 um 13:52

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 schrieb am 07.01.2004 um 13:59

sollte kein problem sein


kleinerChemiker schrieb am 07.01.2004 um 14:14

supper :)


kleinerChemiker schrieb am 07.01.2004 um 17:19

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


funka schrieb am 08.01.2004 um 15:36

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 schrieb am 08.01.2004 um 16:03

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