Suchmuster

liquidbeats

Erfahrenes Mitglied
HAllo

Bräuchte ma eben ein suchmuster, steig da gerade nicht durch.


Es geht darum Table Tags zu entfernen, so dass angenommen es existiert <table border=0 cellpadding=0> und möchte diesen nun raus haben wie kan ich das am besten Realisieren?
Problem ist das alle Table Tags unterschiedlich sind und teilweise noch Style stribute enthalten :rolleyes:

Währe auch nicht schlecht wenn mir jemand zusätzlich eine erklärung geben könnte dem verständnis wegen :)


Gruß
 
PHP:
$text='<table ="""0f0aasdgadfg"xvcgv>blabla</table>';
$text.='<table ="""0f0aasdgadfg"
xvcgv>blublu</table>';
$text.='<table ="""0f0aasdgadfg"xvcgv>bleble</table>';
$text=preg_replace("/<table(.|\r|\n|\t)*?>/i","",$text);
$text=preg_replace("/<\/table>/i","",$text);
echo $text;
Ich versuche zu erklären:
Ein Pattern benötigt ein Zeichen, welches ihn einschließt (hier /).
Das i am Ende heißt, dass Groß- und Kleinschreibung ignoriert wird.
Das <table ist fest und muss zwangsläufig vorkommen.
Danach folgt der beliebiege Teil. Der Punkt steht für ein beliebiges Zeichen. Allerdings nicht \r \n (und vielleicht auch nicht \t) -> Zeilenumbrüche und Tab. Der | steht für oder. Also ein beliebiges Zeichen oder einer der Zeilenumbrüche oder der Tab.
Der Stern steht für 0 mal bis beliebig oft. Das Fragezeichen macht den Teil des Pattern "not greedy", also nicht gierig. Er endet also beim nächsten aufgefunden > und versucht nicht, wie im Normalfall möglichst viel Text zu treffen.
Besonderheit beim schließenden </table> ist noch, dass das Zeichen, welches den Pattern einschließt mit \ escaped werden muss.
Der jeweils getroffene Teil wird mit einer leeren Zeichenkette ersetzt (zweiter Parameter).
Das sollte man natürlich für <td>, <tr> und was sonst noch mit Tabellen zu tun hat erweitern.

Gruß hpvw
 
GRüß dich, die Erklärung ist gut, werde damit gleich mal Spielen gehen und versuchen das mal zu verstehen :)
Besten Dank

Gruß
 
Also ich habe mal Folgendes Probert um einen einkommentierten bereich zu entfernen.
Funktioniert nicht, also hab ichs nicht verstanden :/


PHP:
 $texta='<!-- Start -->irgendwas<!-- Ende -->';
 $texta=preg_replace("/<!-- Start -->(.|\r|\n|\t)<!-- Ende -->*?/i","",$string);

Irgendwie entfernt er dann den gesamten quelltext

wo ist dort der Fehler? ich kapiers jedenfals nicht :/

Gruß
 
Ich gehe mal davon aus, dass Du "irgendwas" behalten willst.
Dann musst Du dies auch im zweiten Parameter angeben.
Das war oben nicht nötig, daher bin ich nicht weiter darauf eingegangen.
PHP:
$texta=preg_replace("/<!-- Start -->((.|\r|\n|\t)*?)<!-- Ende -->/i","\\1",$string);
Das *? am Ende ist überflüssig (zumindest so, wie ich Dein Vorhaben interpretiere). [phpf]preg_replace[/phpf] findet alle Teile im zu durchsuchenden String, die dem Ausdruck entsprechen.
Wiederholen willst Du vermutlich den Teil zwischen den Start- und Ende-Kommentaren. Daher müssen dort der * und das ? hin.
Beim Ersetzen (2. Parameter) kann beliebiger Text stehen und die gefundenen Teile des Ausdrucks (nummeriert anhand der Position im Ausdruck und definiert durch die die runden Klammern) können im Ersatz eingefügt werden. Der gefundene Teil 2 wäre in diesem Fall das letzte Zeichen (innere Klammer) des zwischen den Kommentaren stehenden Textes.

Hoffe das ist soweit verständlich.

Gruß hpvw
 
Firefox Sagt zu mir das Dokument enthält keine Daten :rolleyes: und vom Text her hab ich es diesmal nicht Kapiert.

Bzgl. des vorhabens ist es so das sowohl die html Kommentare als auch das zwischen diesen kommentaren entfernt werden soll.

und diese hier \r|\n|\t kann man das auch beispielsweise so schreiben \a|\b|\c ?
Irgendwie alles Irreführend für mich :/


Gruß
 
Zuletzt bearbeitet:
liquidbeats hat gesagt.:
Firefox Sagt zu mir das Dokument enthält keine Daten
Wenn Du den String anhand des Ausdrucks mit einem leerem String ersetzt. Steht da auch überhaupt nichts mehr drin. Wenn Du das dann ausgibst hat Firefox recht.
Ich würde als Teststring etwas schreiben, wo auch noch was übrig bleibt ;).

liquidbeats hat gesagt.:
Bzgl. des vorhabens ist es so das sowohl die html Kommentare als auch das zwischen diesen kommentaren entfernt werden soll.
Dann musst Du für den 2. Parameter wieder einen leeren String schreiben.

liquidbeats hat gesagt.:
und diese hier \r|\n|\t kann man das auch beispielsweise so schreiben \a|\b|\c ?
Nein, die \r\n\t sind spezielle Zeichen. Für Buchstaben musst Du Charakterklassen bilden (eckige Klammern). Das steht aber in dem Tutorial.

Gruß hpvw
 
Zurück