Seite 1 von 1
php: preg_match hängt
Verfasst: 17.04.2008, 04:28
von OnkelHotte
Ziel der Übung ist es, aus einem String, der eine HTML-Tabelle enthalten kann alle formatierungen mit <p> und </p> zu entfernen.
Leider hängt das Script irgendwo, nur komme ich da nicht so richtig weiter; ist ja auch schon spät und
dem Morgen graut bereits.
Code: Alles auswählen
$NeuerString='<p>blah blub irgendwas</p><table id="lala"><tr><td>ich bin<p>eine neue Zeile</p></td></tr><tr><td>ich bin<p>eine noch ne Zeile</p></td></tr></table><p>Hier geht es weiter, was auch in Ordnung geht</p>';
while (preg_match('#<table id="lala"(.*?)</table>#s', $NeuerString, $match)) {
foreach ($match as $v) {
$vv.=str_replace("<p>","",str_replace("</p>","",$v));
}
$NeuerString = $gefunden[1].$vv.$gefunden[3];
}
Jemand eine Idee?
Verfasst: 17.04.2008, 07:13
von CIX88
Wozu die Schleife mit while?
echo preg_replace('~<p>|</p>~i', '', $NeuerString);
Verfasst: 17.04.2008, 09:30
von OnkelHotte
while deshalb, weil es mehre table sein können.
Verfasst: 17.04.2008, 09:54
von OnkelHotte
@CIX88: Dein replace ersetzt mir die <P>s im kompletten string. Ich braus aber nur in der tabelle

Verfasst: 17.04.2008, 11:59
von Southmedia
OnkelHotte, theoretisch könntest du das auch alles in einem preg_replace-Ausdruck machen, aber dann wird es doch recht wirr. Dein str_replace hingegen bleibt schön übersichtlich (evtl noch in 2 Zeilen aufteilen das ganze...). Schau dir aber mal preg_match_all() an, das ist eleganter als die while-Schleife mit preg_match() - und dafür gemacht

Verfasst: 17.04.2008, 18:09
von CIX88
@OnkelHotte
Achso sorry, dann hatte ich das falsch verstanden, dachte generell alle <p>-Tags ...
Verfasst: 20.05.2008, 07:25
von kev299
also wenn du alle vorkommen mit <p></p> filtern willst wäre das die richtige variante. Du musst preg_match_all greedy machen.
$treffer=preg_match_all(/(<p>).*?(</p>)/si,$string,$neuerstring)
foreach($neuerstring[0] as $neu){
echo $neu."<br>";
}
Verfasst: 21.05.2008, 06:34
von CIX88
Naja die Variable $treffer macht jetzt aber keinen Sinn

Es reicht:
preg_match_all(/(<p>).*?(<\/p>)/si, $string, $neuerstring);
Und man sollte darauf achten, dass Delimiter nicht im Suchpattern mit enthalten sind, und falls doch dann ein \ davor setzen.
Verfasst: 21.05.2008, 07:16
von kev299
CIX88 hat geschrieben:Naja die Variable $treffer macht jetzt aber keinen Sinn

Es reicht:
preg_match_all(/(<p>).*?(<\/p>)/si, $string, $neuerstring);
Und man sollte darauf achten, dass Delimiter nicht im Suchpattern mit enthalten sind, und falls doch dann ein \ davor setzen.
richtig, hab vergessen zu maskieren.
Verfasst: 21.05.2008, 15:00
von net(t)worker
wo nimmst du denn $gefunden her?

Verfasst: 22.05.2008, 07:27
von kev299
net(t)worker hat geschrieben:wo nimmst du denn $gefunden her?

was meinst du mit mit der variable $gefunden
Re: php: preg_match hängt
Verfasst: 22.05.2008, 15:59
von net(t)worker
OnkelHotte hat geschrieben:...
...
$NeuerString = $gefunden[1].$vv.$gefunden[3];
...
...
die da...