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 &#40;preg_match&#40;'#<table id="lala"&#40;.*?&#41;</table>#s', $NeuerString, $match&#41;&#41; &#123;
	foreach &#40;$match as $v&#41; &#123;
		$vv.=str_replace&#40;"<p>","",str_replace&#40;"</p>","",$v&#41;&#41;;
	&#125;
	$NeuerString = $gefunden&#91;1&#93;.$vv.$gefunden&#91;3&#93;; 
&#125;
Jemand eine Idee?

Verfasst:
von

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? :wink:

Verfasst: 22.05.2008, 07:27
von kev299
net(t)worker hat geschrieben:wo nimmst du denn $gefunden her? :wink:
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...