2016-04-02 11 views
-1

Ich versuche, ein bestimmtes HTML-Tag mit preg_replace zu entfernen, aber ich kann keine Möglichkeit finden, es zu tun, es funktioniert, wenn ich die Zeilenumbrüche aber nicht mit entfernen.PHP preg_replace HTML-Tag mit Zeilenumbrüchen

Die Regex so weit:

preg_replace("/<ol class=\"comment-list\">.*?<\/ol>/", "", $string); 

Die Zeichenfolge in Frage:

<ol class="comment-list"> 
<time datetime="2016-03-25T15:27:34+00:00"></ol> 

Ich http://www.phpliveregex.com/ mit, es zu testen.

Vielen Dank für Ihre Hilfe!

+2

[Verwenden Sie keinen regulären Ausdruck, um HTML-Tags zu entsprechen] (http://stackoverflow.com/a/1732454/3294262) – fusion3k

+3

Fügen Sie den 's' Modifikator hinzu, so dass der Punkt' .' auch mit Zeilenumbrüchen übereinstimmt: '. .. <\/lol>/s' – HamZa

+0

welche Ausgabe möchten Sie? –

Antwort

1

Ich weiß, dass wahrscheinlich diese Antwort ist nicht das, was Sie wollen, aber wenn Sie versuchen wollen, ist dies, wie Sie <ol> Knoten mit DOMDocument entfernen:

$dom = new DOMDocument();   // Init DOMDocument object 
libxml_use_internal_errors(True); // Disable libxml errors 
$dom->loadHTML($html);   // Load HTML 
$xpath = new DOMXPath($dom);  // Init DOMXPath (useful for complex queries) 

/* Search for all <ol> nodes with class “comment-list”: */ 
$nodes = $xpath->query('//ol[@class="comment-list"]'); 
/* Remove nodes: */ 
while($nodes->length) 
{ 
    $nodes->item(0)->parentNode->removeChild($nodes->item(0)); 
} 

/* Output modified HTML: */ 
echo $dom->saveHTML(); 

Ja, das sind 7 Zeilen im Vergleich zu einem, aber Ich schlage dir diesen Weg vor. Reguläre Ausdrücke sind eine großartige Erfindung, aber nicht für HTML/XML.


0

hat gesagt, ich in kleinen Kommentare auf dieser Seite @ Hamzas Kommentar in der Tat ist der Hier nur ein paar nützliche Informationen: Fügen Sie den Modifikator s zu Ihrem Regexp hinzu, damit er mit dem neuen übereinstimmt Linien.

Es ist ein guter Rat zu sagen, dass Sie HTML mit regexp nicht analysieren (x) sollten. Aber die Frage hier war ziemlich einfach und fragte nur, wie man Zeilenumbrüche mit preg_replace abgleicht. Das ist wie man es macht.