2016-04-08 19 views
1

ich eine Zeichenfolge, die BBcode enthält und ich es geschafft, alle Formatierungen mit diesem Code zu entfernen:Suchen und Ersetzen von Tags und seinen Inhalt in PHP

$plain_text = strip_tags(str_replace(array('[',']'), array('<','>'), $message)); 

Aber ich habe ein Stück Code, das ich zu entferne sein Inhalt. Dieser Code:

[ATTACH=full]4281[/ATTACH] 

Die Zahl '4281' wird immer anders sein, so wie kann ich es entfernen?

Ich habe versucht:

preg_replace("/[ATTACH=full](.*)[\/ATTACH]/eis", '', $message); 

aber das funktioniert nicht. Ich vermute, es hat etwas mit dem "attach = full" -Teil und dem Gleichheitszeichen zu tun.

Irgendwelche Ideen? Vielen Dank.

+0

Sie sollten * nie * HTML mit Regex analysieren. Verwenden Sie stattdessen [einen PHP-DOM-Parser] (http://simplethmdom.sourceforge.net/). –

+0

Das Gleichheitszeichen hat keine besondere Bedeutung; aber die eckigen Klammern tun (Zeichenklasse) - also musst du denen entkommen. Und entfernen Sie den 'e' Modifikator - abgesehen davon, dass er veraltet ist und daher eine Warnung generiert, hat er hier sowieso keinen nützlichen Zweck. – CBroe

+0

@JayBlanchard, es kommt immer darauf an, was du erreichen willst. Für den Fall, dass niemand reguläre Ausdrücke schlagen kann – kirugan

Antwort

0

sollten Diese Regex arbeiten:

preg_replace("/\[ATTACH=full\].*\[\/ATTACH\]/", '', $message); 

Wie Cbroe sagte, Sie '[' und ']' Zeichen scape benötigt.

UPDATE: Hinzugefügt Schrägstrich '/' am Anfang und Ende der Regex.

+0

Sie haben Recht, ich entkam diesen Zeichen, aber immer noch, ich bekomme diesen Fehler: preg_replace(): Trennzeichen darf nicht alphanumerisch oder Backslash sein – Ironank

+0

Hallo @Ironank, aktualisierte ich die Lösung mit einem Schrägstrich '/', wie es erforderlich war Lösen Sie das Problem 'Begrenzer'. Ich habe an einem einfachen PHP-Skript getestet. Hoffe es funktioniert für dich. – Arcangel2p

+0

Danke, nur müde, und kein Fehler mehr. Aus irgendeinem Grund wird jedoch nicht entfernt, was sich in den Tags befindet. Ich habe versucht. * Und auch (. *) Aber nichts. Irgendwelche Ideen? – Ironank