2016-03-29 8 views
-1

Stringから取得する必要のあるデータがあるところでJavaプログラムを作成しています(これは実際にはhtmlです)。次のようにJavaの文字列で同時タグを一致させる

私のコードは次のとおりです。

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は何も印刷されません。スキップされます(同じパラメタで2つのデータ要素を取得しようとしているためです)。

Case 2

が働いている。ここ

248 1 

次のように予想通りの結果を出力しますRegex Fiddle

私はCase 1Case 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); 
関連する問題