2016-03-29 2 views
-1

Я пишу программу 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

Благодарности

+2

Обязательные ссылки: (общий) http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags (более конкретно) http://stackoverflow.com/q/701166/1393766. – Pshemo

+2

Вот почему одно не использует регулярное выражение для анализа XML или HTML. XML и HTML не являются регулярными языками и обычно не обрабатываются регулярным выражением, за исключением очень ограниченных случаев. Используйте настоящий синтаксический анализатор HTML или XML. –

ответ

0

Поведение, которое вы описываете, не является результатом x и не может быть воспроизведен с предоставленным кодом.

(.. Я буду обновлять/удалять это, если/когда предоставляется больше информации Это слишком долго для комментария, и поможет флаг людей)

я (текст представляет номер примера):

250 one 3 
248 two 1 

Когда я запускаю это:

String example1="<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>"; 


String ftnNum = example1.replaceAll("(.*)(<sup>)([0-9]+)(</sup>)(.*)", "$3"); 
String ftnRefNum = example1.replaceAll("(.*)(<span class=\"xrefInternal\" id=\"fo)([0-9]+)(\")(.*)", "$3"); 
System.out.println(ftnRefNum + " one " + ftnNum); 

String example2="<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>"; 
String ftnNum2 = example2.replaceAll("(.*)(<sup>)([0-9]+)(</sup>)(.*)", "$3"); 
String ftnRefNum2 = example2.replaceAll("(.*)(<span class=\"xrefInternal\" id=\"fo)([0-9]+)(\")(.*)", "$3"); 

System.out.println(ftnRefNum2 + " two " + ftnNum2); 
Смежные вопросы