Wie Entferne ich eine ganze HTML-Tags (und deren Inhalt), die von seiner Klasse mit einem regex?
Ich bin nicht sehr gut mit Regex, aber ich Lerne.
Möchte ich entfernen Sie einige html-Tags durch den Namen der Klasse. Dies ist, was ich habe, so weit :
<div class="footer".*?>(.*?)</div>
Den ersten .*? ist, weil es möglicherweise andere Attribut und das zweite ist, enthält er möglicherweise andere html-Sachen.
Was mache ich falsch? Ich habe versucht eine Menge eingestellt, ohne Erfolg.
Update
Innerhalb des DIV-es kann mit mehreren line-und ich Spiele mit Perl-regex.
- was die Zielsprache verwenden Sie?
- Ich fügte hinzu, Perl, aber ich kann es erfordern, die in C#
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möchten Sie auch zu ermöglichen, für andere Dinge, bevor die Klasse in das div-tag
Auch, gehen groß-und Kleinschreibung. Sie können zu entkommen müssen Dinge wie die Anführungszeichen, oder der Schrägstrich im schließenden tag. Welchem Kontext tun Sie das in?
Beachten Sie auch, dass HTML-Parsen mit regulären Ausdrücken können sehr böse, je nach Eingang. Ein guter Punkt, gebracht ist, in einer Antwort unten - angenommen, Sie haben eine Struktur wie:
Versuchen zu bauen ein regex für das ist ein Rezept für eine Katastrophe. Ihre beste Wette ist, laden Sie das Dokument in einen DOM, und führen Manipulationen auf, die.
Pseudocode, sollte die Karte eng an XML::DOM:
Hier ist eine perl-Bibliothek, HTML::DOM, und eine andere, XML::DOM
.NET hat gebaut-in-Bibliotheken zu handhaben dom-parsing.
Wie gesagt, HTML ist notorisch schwierig zu behandeln mit regexes, und eine DOM-Ansatz besser sein könnte. E. g.:
In Perl müssen Sie das
/s
Modifikator, ansonsten ist der Punkt nicht übereinstimmt, eine Zeile.Sagte, mit einem entsprechenden HTML-oder XML-parser, um unerwünschte Teile einer HTML-Datei ist viel besser geeignet.
Arbeitete für mich, aber nötig, um backslashes vor Sonderzeichen
Teilweise hängt von der genauen regex-engine, die Sie verwenden - die Sprache etc. Aber eine Möglichkeit ist, dass Sie brauchen, um die Flucht der Zitate und/oder der Schrägstrich. Möchten Sie vielleicht auch, um es groß-und Kleinschreibung.
Sonst bitte sagen, welche Sprache/Plattform, die Sie benutzen .NET, java, perl ...
Versuchen Sie dies:
Ihre größte problem wird sein, verschachtelte tags. Zum Beispiel:
Den regexp gegeben würde Spiel alles durch die
</b>
verlassen der</div>
baumelt am Ende. Sie müssen entweder annehmen, dass das tag, das Sie suchen, hat keine verschachtelten Elemente oder benötigen Sie irgendeine Art von parser von HTML, DOM und XPath-Abfrage zu entfernen, einen ganzen sub-Baum.Dies wird schwierig sein, weil die Begehrlichkeiten von regulären Ausdrücken (Beachten Sie, dass meine Beispiele kann spezifisch für perl, aber ich weiß, dass Habgier ist ein Allgemeines Problem mit REs.) Die zweite
.*?
passen so viel wie möglich, bevor die</div>
, so dass, wenn Sie Folgendes haben:<div class="SomethingElse"><div class="footer"> stuff </div></div>
Den Ausdruck mit:
<div class="footer"> stuff </div></div>
ist wahrscheinlich nicht das, was Sie wollen.
warum nicht
<div class="footer".*?</div>
ich bin kein regex-guru, aber ich glaube nicht, dass Sie brauchen, um anzugeben, dass die Letzte Klammer für Ihre offenen div-tag