Frage an regex, php – Wie kann ich ein HTML-Element und seinen Inhalt mit RegEx entfernen?

6

Ich habe eine Div-ID, die ich aus einer Ausgabe entfernen möchte, die so aussieht

<div id="ithis" class="cthis">Content here which includes other elements etc..) </div>

Wie kann ich dieses div und alles darin mit PHP und Regex entfernen?

Vielen Dank.

Können Sie näher darauf eingehen? Liegt das in Form einer Schnur vor? Ian Elliott
Kennst du den ID- und / oder Klassennamen? Oder gibt es eindeutige Bezeichner für die ID und / oder Klasse, damit Sie nicht alle Divs entfernen, die in diese Beschreibung fallen? Oder möchtest du alle divs und ihren Inhalt entfernen? Justin Giboney

Deine Antwort

3   die antwort
1

/<id.*?<\/id[^>]*>/ mit nichts.

0

cht einfach nicht ausgeben? Oder versuchst du es zu verstecken? Wenn ja, sagen Sie in einem Stylesheet einfach#ithis {display:none}.

Wenn der String eine Rückkehr von einer Funktion in PHP ist, die Sie nicht geschrieben haben UND die Sie nicht mit diesem Code verarschen möchten, müssen Sie einen sehr schwierigen regulären Ausdruck schreiben, um verschachtelte Divs, unterschiedliche Syntax in der Ausgabe usw. Zu berücksichtigen Ich würde empfehlen, einen Parser zu verwenden (vielleicht diesZend Framework Komponente), um Ihnen zu helfen. Ich habe es ein paar Mal für etwas Ähnliches verwendet. Wenn Sie mit ZF überhaupt nicht vertraut sind, möchten Sie vielleicht etwas anderes ausprobieren.

13

dass Sie dies nicht tun. Sie verwenden stattdessen einen der vielen HTML-Parser von PHP. Regexe sind eine flockige und fehleranfällige Methode zur Manipulation von HTML.

Davon abgesehen können Sie dies tun:

$html = preg_replace('!<div\s+id="ithis"\s+class="cthis">.*?</div>!is', '', $html);

Aberviele Dinge können daran falsch sein. Wenn das beispielsweise ein div enthält:

<div id="ithis" class="cthis">Content here which <div>includes</div> other elements etc..) </div>

Sie werden am Ende mit:

 other elements etc..) </div>

da hört der reguläre Ausdruck beim ersten auf</div>. Und nein, es gibt nichts, was Sie wirklich tun können, um dieses Problem (mit regulären Ausdrücken) konsequent zu lösen.

Gemacht mit einem Parser sieht es ungefähr so ​​aus:

$doc = new DOMDocument();
$doc->loadHTML($html);
$element = $doc->getElementById('ithis');
$element->parentNode->removeChild($element);
$html = $doc->saveHTML();
+1. Es ist erwähnenswert, dass (A) Wenn das Element nicht existiert, dann$element istNULL und das->removeChild() Der Befehl schlägt mit einem schwerwiegenden Fehler fehl, und (B) Sie können / möchten möglicherweise den Befehl verwenden@ zu verursachen->loadHTML() So unterdrücken Sie Hinweise auf fehlerhaftes HTML:@$doc->loadHTML($html); cale_b

Verwandte Fragen