[PHP] Problem mit eregi()

lamptektus

Active member
ID: 43279
L
9 Mai 2006
31
1
Hi,
ich bastel etwas rum und möchte verschiedene Daten aus einer HTML-Datei auslesen.

Dazu habe ich schon (vereinfach) folgendes Skript:

$fp = @fopen("datei.html", "r");
$rf = @fread($fp, 1048576);

$grab = eregi("<title>(.*)</title>", $rf2, $wucount_str);
echo $wucount_str[1];

was mir jetzt beispielsweise den Titel der Seite ausgibt. Ich hab auch schon ein bißchen weiter gespielt und hab mir weitere Teile ausgeben lassen, jetzt bin ich jedoch am Ende meiner sowieso bescheidenen Kenntnisse angelangt.

Ich steh jetzt vor dem Problem, dass ich eine Tabelle vor mir habe und dort aus ein paar Spalten die Daten auslesen will. Wenn ich das jetzt nach meiner obigen Methode mache, kann ich aber das Ende nicht richtig setzen (was beim </title> kein Problem war, da es eindeutig war).
Nun gibt es aber bei der Tabelle kein eindeutiges Kennzeichen für das Ende, d.h. ich müsste etwas haben womit ich php sage:
Ich will, dass du das Ende z.B. beim ersten(!!!) gefundenen </td> machst und ich somit einen Endpunkt analog zum </title> wie im obigen Beispiel habe.

So wie ich es jetzt habe, gibt er mir zwar als Anfang die gesuchte Zahl aus der Tabelle aus, das Ende kapiert er aber nicht und gibt mir die gesamte Tabelle bis zum letzten </td> oder sonstwas aus.

Kann mir bitte jemand helfen? :ugly:
 
An deiner Stelle würde ich "trotzdem" erst die ganze Tabelle auslesen (also alles zwischen <table> und </table>) und später die wichtigen Daten rausfiltern!
(Ansonsten mit passendem regEx.)

Btw: evtl. preg_match verwenden?
 
Um nur die Daten bis zum nächsten schliessenden Tag auszulesenden, musst Du den Quantor (also ?, + oder *) ungierig machen, indem Du ihm ein ? hinten dran stellst. Per default sind alle Quantoren gierig, das heisst, sie nehmen sich soviel, wie sie kriegen können.

Am Beispiel:
Code:
~<td>(.*)</td>~
Hier greift sich der RegExp alles bis zum letzten schliessenden Tag.
Code:
~<td>(.*?)</td>
Hier wiederum nur bis zum nächsten schliessenden Tag.
 
Genau das ist es, was ich brauche!

Wenn ich das nun aber so mache, also

$grab77 = eregi("<tag1>(.*?)</tag2>", $rf2, $wucount_str77);

wobei tag1 eindeutig ist, tag2 oft vorkommt, so bekomme ich
Warning: eregi(): REG_BADRPT

Wieso?
 
Hm, bei eregi() weiss ich nu nicht, wie das da zustande kommen könnte. Ich würde sowieso eher die preg_xxx()-Funktionen verwenden, da sie einfach mächtiger und afaik auch standardkonformer sind.

Könnte evtl sein, dass eregi() auch keine (un)gierigen Quantoren kennt.

Falls Du's mit preg_xxx() nicht hinkriegen solltest, poste hier einfach Deine eregi()-Anweisungen. Dann kann man die ja mal zu preg-Anweisungen umstricken. ;)