Ich schreibe ein Java-Programm, wo es einige Daten gibt, die aus einem String gezogen werden müssen (in der Praxis ist dies html).Übereinstimmende simultane Tags in Java String
Mein Code ist wie folgt:
while ((line = in.readLine()) != null) {
if (line.contains("xrefInternal")) {
String ftnNum = line.replaceAll("(.*)(<sup>)([0-9]+)(</sup>)(.*)", "$3");
String ftnRefNum = line.replaceAll("(.*)(<span class=\"xrefInternal\" id=\"fo)([0-9]+)(\")(.*)", "$3");
System.out.println(ftnRefNum + "\t" + ftnNum);
}
}
Während die Arbeit an diesem ich in 2 Fällen in meiner Datei kam.
Fall 1
<p class="paraNoIndent1" style="text-indent: 0%;">texy<span class="xrefInternal" id="fo249"><a href="abc.html#fo_249"><sup>2</sup></a></span> Tewxt.<span class="xrefInternal" id="fo250"><a href="abc.html#fo_250"><sup>3</sup></a></span> text</p>
Fall 2
<p class="paraNoIndent1" style="text-indent: 0%;">Text.<span class="xrefInternal" id="fo248"><a href="abc.html#fo_248"><sup>1</sup></a></span></p>
Case 1
nichts drucken. Es wird übersprungen (ich denke, dass ich versuche, zwei Datenelemente im selben Parameter zu holen).
Case 2
druckt das Ergebnis als
248 1
Hier wie unten erwartet funktioniert Regex Fiddle
Bitte lassen Sie mich wissen, wie Sie den Code überarbeiten, so dass Case 1
wie Case 2
Dank funktioniert
Pflicht Links: (allgemein) http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags (genauer) http://stackoverflow.com/q/701166/1393766. – Pshemo
Aus diesem Grund verwendet man Regex nicht zum Parsen von XML oder HTML. XML und HTML sind keine regulären Sprachen und können normalerweise nicht mit regex analysiert werden, außer in sehr begrenzten Fällen. Verwenden Sie einen echten HTML- oder XML-Parser. –