2016-06-10 19 views
-2

Ich versuche, einen regulären Ausdruck für die folgende String-Eine einfache Regex Ausgabe

<tr> 
     <td colspan=2> 
     <p><b> 
     CITY Head: 
     <span > 
     <span >##CITY##</span> 
     <o:p></o:p> 
     </span> 
     </b> 
     </p> 
     </td> 
     <td colspan=1> 

ich den ganzen TD Block mit CITY Kopf darin finden wollen zu erstellen. Ich könnte mit dem folgenden Regex kommen.

<td(.*)[\s](.*)[\s]+CITY Head+(.*)[\s](.*)[\s](.*)[\s](.*)[\s](.*)[\s](.*)[\s](.*)[\s]+<\/td> 

Im Grunde hatte ich über und unter dem CITY Kopf(.*)[\s] für alle Zeilen zu schreiben. Dies kann jedoch in verschiedenen Fällen unterschiedlich sein.

Daher suche ich nach einer allgemeinen Möglichkeit, alle (.*)[\s] in etwas unabhängig von der Anzahl der Zeilen zu kombinieren.

+2

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – HRgiger

+1

Aber wie Bobince sagt: * "Also los, parse HTML mit regex, wenn du musst, es ist nur gebrochener Code, nicht Leben und Tod. "* –

+0

Ja, dem Ratschlag von Bobince folgend, konnte man schließlich temperierte gierige Token studieren. Wenn Sie Probleme mit der Leistung haben, fahren Sie mit der Untersuchung der Loop-Technik fort. Und am Ende merke nur, dass ein DOM-Parser so viel einfacher war. –

Antwort

0

[\s\S]*? wird die kleinstmögliche Anzahl (* = 0 oder mehr, ? = ungreedy) von Leerzeichen (\s) oder Nicht-Leerzeichen (\S) (dh alle) Zeichen übereinstimmen.

<td((?!<\/?td)[\s\S])*?CITY Head[\s\S]*?<\/td> 

Die Behauptung (?!<\/?td) stellt sicher, dass der Abschnitt vor CITY Head nicht mehr als eine Tabellenzelle nicht überspannen.

Aber Verwendung einer Regex ist keine zuverlässige Möglichkeit zum Analysieren von HTML. Insbesondere kann diese Regex das falsche Ergebnis herausziehen, wenn der HTML-Code einen Syntaxfehler enthält.

+0

Der obige Regex würde alle die TDs nehmen, die vor dem "CITY Head" kommen. Der Regex muss so entworfen werden, dass nur der erste TD vor CITY Head in Parsing kommt. – Invisible

+0

Stimmt, hätte testen sollen. Ich habe eine negative Behauptung hinzugefügt, um es zu beheben. Aus diesem Grund antworte ich normalerweise auf diese Fragen mit "Sie können HTML mit Regex nicht analysieren";) –

+0

Perfekt. Danke vielmals. :-) – Invisible