• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

mit ereg_replace() html tags auslesen

Jonnie

New member
Hallo,

ich will mit ereg_replace() html-tags in einem quelltext auslesen. Aber irgendwie klappt es nie, vor allem weil die funktion trotz modifier u immer noch zu gefräßig ist.

Also Beispiel ist z.B., dass ich einen Quelltext habe in dem einmal der tag:

PHP:
<p title="name">John</p>

vorkommt. Da will ich dann also John geliefert bekommen. Bisher hört er mir aber bei dem ersten </p> nicht auf sondern gibt alles bis zum letzten aus oder andere spässkens die ich nich verstehe.
Und ginge es auch, dass ich ihm sage, er soll erst das zweite oder dritte vorkommen von diesem Tag (falls es doch mehrere gibt) ausgeben?
 
Ja ich meinte natürlich auch preg_replace()...

also der Ansatz, er meiner Meinung nach funzen müsste, es aber nict tut, ist dieser:

PHP:
$source= '<p title=\"name\">John</p>  <p> Alfred</p>';

preg_replace('!(<p title="name">)(.*)(</p>)!u',"$2",$source);

auch mit Fragezeichen

PHP:
preg_replace('!(<p title="name">)(.*?u)(</p>)!u',"$2",$source);

hats nichts gebracht.
 
Zuletzt bearbeitet:
Falls du dich drauf verlassen kannst dass innerhalb des Absatzes keine weiteren html-Elemente kommen kannst dus einfach so machen:
PHP:
$source = '<p title="name">John</p>  <p> Alfred</p>';
var_dump(preg_replace('!<p title="name">([^<]*)</p>.*!', '$1',$source));
 
Ja, es war wohl einer der Versuche, aber mt groß-U klappte es auch nicht :) preg_replace ist bei mir größtenteils noch try und error, irgendwie schaffe ich es trotz allen anleitungen meist nicht, das sauber für mich umzusetzen. Naja die grundeigenschaft von der funktion (bzw. woran sich die meisten tutroials orientieren) ist ja auch das ersetzen und nicht das rausschneiden...

habs mit deinem code oben hinbekommen, und eigentlich auch soweit verstanden wie das funktiuoniert, da allerdings doch noch ein bisschen html dazwischen ist hab ich es so versucht:

PHP:
$zeile = '<td class="target"><a href"irgendwo.php">Stefan</a></td>';

var_dump(preg_replace('!.*<td class="target">([^</td>]*)</td>.*!s', '$1',$zeile));

was aber leider auch nicht ging. Also er sollte alles nehmen bis auf </td> und dann bei </td> stoppen
 
Um HTML sauber mit RegExp zu parsen muss man sich ziemlich ziemlich verbiegen (ist aber möglich - mit rekursiven Pattern) - einfacher ist es da, sich einen Parser zu bauen oder einen aus dem Netz nur nehmen.
 
Code:
/<([a-zA-Z]+)(\\s+[a-zA-Z]+?(=(\'|")[a-zA-Z]*\\4)?)*(\s?\\/>|(>([^<]*(?R)?[^<]*)*<\\/\\1>))/
funktioniert schon einigermaßen...

edit:
Code:
(\'|")[a-zA-Z]*\\4
will irgendwie nicht... naja. ich geh mal ins bett
 
Zuletzt bearbeitet:
Hallo, hab mir jetzt mal eine ajax-Umgebung gebastelt mit der ich schnellr testen kann, was für eine erleichterung!

Dabei hab ich dann doch gleich mal preg_match_all() ausprobiert, weil ich dann dochmal gelesen hab, das des ja mehr kann als nur true oder false zurückgeben :) (mensch ich hab einfach zu wenig ahnung/erfahrung mit diesen funktionen, ziemlich nervig)

naja auf jeden fall war es dann relativ einfach:

PHP:
preg_match_all('!<td class="target">(.*?)</td>!s',source,$array);

foreach($array[1] AS $key => $value) {
        
        echo "|".strip_tags(trim($value))."|<br><br>";
        
    }

ok, das mit dem strip_tags is jetz ein bisschen.. gemogelt, aber was solls, es geht erst mal.

Das da oben und was ihr wegen parser etc. erzählt habt guck ich mir aber auch nochmal an, leider hab ich grad ne extrem schlechte inet-verbindung weshalb alles nich so gut geht,

greets, und danke

kommen bestimmt noch weitere fragen... (PS, was ja echt dolle wäre ist eine funktion/objekt was auch auch immer, mit der man html tags so einfach selegieren kann wie bei jquery. Theoretisch könnte man sich ja mit den eregx-sachen einen eigenen DOM zusammenbauen, wenn sich jemand die mühe mal machen möchte...)
 
Zurück
Oben