Я пишу программу Java, где есть некоторые данные, которые нужно вытащить из String (на практике это html).Совпадение тегов в Java String
Мой код выглядит следующим образом:
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);
}
}
Во время работы над этим я наткнулся на 2-х случаях в моем файле.
Случай 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>
Случай 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
ничего не печатает. Он пропускается (я думаю, из-за попытки получить два элемента данных в одном параметре).
Case 2
печатает результат, как ожидается, как показано ниже
248 1
Здесь работает Regex Fiddle
Пожалуйста, дайте мне знать, как переделать код так, что Case 1
будет функционировать как Case 2
Благодарности
Обязательные ссылки: (общий) http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags (более конкретно) http://stackoverflow.com/q/701166/1393766. – Pshemo
Вот почему одно не использует регулярное выражение для анализа XML или HTML. XML и HTML не являются регулярными языками и обычно не обрабатываются регулярным выражением, за исключением очень ограниченных случаев. Используйте настоящий синтаксический анализатор HTML или XML. –