Candid Dauth: Reguläre Ausdrücke

Beitrag lesen

Hallo du da draußen,

$value = preg_replace( "/<table[^>]*</table>/", "", $value );
Er nimmt jetzt zwar das <table>-tag heraus, aber nicht das was danach bis zum </table>-Tag kommt. Wie muss ich das ganze erweitern?

Also: Wenn ich das richtig sehe, sucht dieses Konstrukt nach dem String "<table", und wenn danach beliebig viele Zeichen außer > kommen und dann </table>, ersetzt er es durch nichts. Das funktioniert in sofern schon mal nicht, da ja nach <table wohl noch irgendwo ein > kommt, was du aber ausschließt.

Willst du nun das Table-Tag _und_ das was dazwischen steht löschen willst, musst du den regulären Ausdruck nur ein wenig ändern:
/<table[^>]*>.*</table>/

Willst du allerdings nur das, was dazwischen steht, löschen, und die Table-Tags dalassen, sieht es so aus:
$value = preg_replace("/(<table[^>]*>).*(</table>)/", "\1\2", $value);

Erläuterung: Für jeden in einer Klammer stehenden Ausdruck wird ein Platzhalter angelegt. Für die Klammer (<table[^>]*>) heißt der Platzhalter \1, für (</table>) \2 usw. Falls es dich noch interessiert, steht \0 für den gesamten Ausdruck.

Jetzt fällt mir aber doch glatt was auf: Meine Lösung stimmt auch noch nicht ganz: Sind mehrere Table-Konstrukte in $value, löscht er den String vom allerersten <table>-Tag bis zum allerletzten </table>-Tag und nicht das zwischen den Table-Tags... Hat jemand eine Idee, wie man das korrigieren könnte? (Mit regulären Ausdrücken, ohne wäre es halt kompliziert...)

Grüße von hier drinnen, aus Biberach an der Riss (http://www.stadt-biberach.de/),
Candid Dauth (Dogfish)

PS: Ich hoffe, dass ich jetzt keinen Müll erzählt habe ;-)

--
Selten Dumme sind nicht selten, aber dumm.
http://dogfish.net.tc/