2017-12-27 4 views
0

Ich habe einen HTML-String. Ich möchte jedes Tabellenelement (Open-Close-Tags) mit Regex finden. Ich versuchte <table(.*?)>.*</table> Muster dafür. Aber es funktioniert nicht, weil es so etwas wie zwischen dem ersten offenen Tag der Tabelle und dem letzten Tag der letzten Tabelle entspricht.Finden Sie alle Tabellenelemente in HTML mit Regex in Java

Hier ist mein Code:

Pattern pattern = Pattern.compile("<table(.*?)>.*</table>"); 

und ich habe auch versucht:

Pattern pattern = Pattern.compile("<table(.*?)>.*</table>",Pattern.DOTALL); 

Hier ein Beispiel ist:

<table id="table1"> 
    </table> 
    <table id="table2"> 
     <table id="table3"> 
     </table> 
    </table> 

Mein Muster alle Elemente zwischen <table id="table1"> findet Öffnen Sie das Tag tag und table2.

Aber ich möchte, dass es jedes Tabellenelement mit seinem Tag übereinstimmt. Zum Beispiel: open-close-Tags von table1, open-close-Tags von table2.

Vielen Dank für Ihre Antworten.

+0

Parsing HTML mit regulären Ausdrücken ist schlechte Praxis betrachtet. Sie sollten stattdessen einen ausgeklügelten HTML-Parser verwenden. Siehe [Verwenden von regulären Ausdrücken zum Analysieren von HTML: Warum nicht?] (Https://stackoverflow.com/questions/590747/using-regular-expressions-to-parse-html-why-not) – vanje

Antwort

0

Ich denke, es gibt keine gute Lösung für Ihre Frage. Weil Sie HTML mit einer Regex nicht analysieren können.

Werfen Sie einen Blick auf diese Antwort:

Reguläre Ausdrücke sind ein Werkzeug, das nicht ausreichend anspruchsvoll ist die Konstrukte von HTML verwendet zu verstehen. HTML ist keine reguläre Sprache und kann daher nicht von regulären Ausdrücken analysiert werden. Regex-Abfragen sind nicht in der Lage, HTML in seine sinnvollen Teile zu zerlegen.

https://stackoverflow.com/a/1732454/2801860

0

Ich glaube, Sie ein wenig Logik Problem haben, die folgende regex geben Ihnen jede Öffnung Tabellen-Tag in einer Gruppe:

\s*(<table.*>) 

obwohl es nicht seine Schließ Tag entsprechen kann, was Sie tun können, ist Schließen Sie einfach das schließende Tag in den untergeordneten Elementen der Tabelle, und für die Eltern reparieren Sie es einfach manuell

+0

Ihr Muster funktioniert gut, um jedes zu finden öffnende Tabellentags, aber ich verstehe nicht, wie man das Close-Tag abgleicht. Kannst du das mit einem Beispiel erklären? – Veysel

+0

Sie müssen die abschließenden Tags nicht abgleichen, fügen Sie sie einfach so hinzu, wie sie sind, können Sie sie auch wörtlich suchen, Regex kann Ihnen nicht das passende schließende Tag für jede Tabelle finden, wenn es mehr als 1 gibt Ebene auf paranting – tomersss2

+0

ich sehe. Danke für deine Antwort. – Veysel

Verwandte Themen