Bestimmte Tags aus String entfernen

CikoNo1

Erfahrenes Mitglied
Hallo Leute,

ich verstehe preg_replace nicht so ganz. Ich habe einen String mit HTML Code nun will ich sämtliche
HTML:
<a href=.... >
</a>
<!-- Alle Kommentare müssen raus -->
und HTML Kommentare aus dem String rausschmeisen. Hab hier das mal gefunden:
PHP:
$xmlString = preg_replace ('!<a.+?>!is','',$xmlString);
	
$xmlString = preg_replace ('!</a.+?>!is','',$xmlString);

Die öffnenden <a> Tags schmeisst er raus aber die schließenden und die Kommentare bekomme ich nicht raus. Bei den schließenden schmeißt er mich eine ganze Menge anderer Texte raus.

Kann mir einer helfen dieses preg_replace zu verstehen?

Viele Grüße
 
Habs jetzt hinbekommen, hab noch mal gesucht und wurde endlich fündig:
Hier mal für die jenigen die das auch mal brauchen und nicht weiterkommen:

PHP:
$xmlString = preg_replace ('@<a[\/\!]*?[^<>]*?>@si','',$xmlString); //entfernt alle öffnenden a-Tags
		
$xmlString = preg_replace ('@</a[\/\!]*?[^<>]*?>@si','',$xmlString); //entfernt alle schließenden a-Tags
		
$xmlString = preg_replace ('@<!--[\/\!]*?[^<>]*?-->@si','',$xmlString); //entfernt alle Kommentare

Viele Grüße
 
Regulaere Ausdruecke sind eine eigene Klasse fuer sich. Die Regulaeren Ausdruecke, die du da gefunden hast sind Schrott. Sie matchen gegen die a, abbr, acronym, address, applet und area HTML Tags.

Ich schluessel dir das mal auf:

Code:
!<a.+?>!is

Die unterstrichene Teile sind die Einstellungen, die fuer den ganzen regulaeren Ausdruck gelten sollen. In diesem Beispiel sind das PCRE_CASELESS (das i) und PCRE_DOTALL (das s).

  • PCRE_CASELESS bedeutet, dass Buchstaben matchen sollen, unabhaengig davon ob sie gross oder klein geschrieben wurden.
  • PCRE_DOTALL bedeutet, dass die . Wildcard (Erklaerung spaeter) auch auf Zeilenumbrueche matchen soll.

Code:
!<a.+?>!is

Ist die eigentliche Vergleichsanweisung. Das < steht fuer eine oeffende Klammer. Der Punkt fuer ein beliebiges Zeichen. Das +? fuer "mindestens ein mal oder mehr, aber so wenig wie noetig". Das > fuer eine schliessende Klammer.

Also beschreibt der Regulaere Ausdruck eigentlich folgendes:
Suche einen String, welcher mit '<a' beginnt. Danach soll mindestens ein mal oder oefter beliebiges Zeichen kommen, aber nur so lange bis ein > gefunden wurde.

Das gleiche fuer

Code:
!</a.+?>!is

Suche einen String, welcher mit '</a' beginnt. Danach soll mindestens ein mal oder oefter beliebiges Zeichen kommen, aber nur so lange bis ein > gefunden wurde.

Dann sollte klar sein, wieso er den halben Text bei

Code:
!</a.+?>!is

entfernt.

Code:
<a href="#">Linktext</a> Ein wenig foobar <b> und etwas fettes foobaz</b>

http://www.regular-expressions.info/ sollte weitergehende Infos geben.
 
Ich würde folgende reguläre Ausdrücke verwenden:
Code:
/<\/?a(?:\s[^>]*)?>/si
/<!--[^>]*-->/si
 
Zurück