2016-10-27 5 views
0

文字列が変数fromFileに割り当てられている。このようなものです:私の2つのREGEXを簡略化するには?

<!DOCTYPE html> 
<!-- 
To change this license header, choose License Headers in Project Properties. 
To change this template file, choose Tools | Templates 
and open the template in the editor. 
--> 
<html> 
    <head> 
     <title>TODO supply a title</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    </head> 
    <body> 
     <div>TODO write content</div> 

     <span class="test"></span> 
     <ruby> 
     text1<rp>(</rp><rt>textA</rt><rp>)</rp> 
     text2<rp>(</rp><rt>textB</rt><rp>)</rp> 
     text3<rp>(</rp><rt>textC</rt><rp>)</rp> 
     </ruby> 
     <img src="images/aaaaa.jpg"> 
     <img src="./audio/bbbbb.mp3"> 
     <img src="../../audio/ccccc.mp3"> 
     <img class="aaaa"> 
     <input class="bbbb"> 
     <audio controls> 
      <source src="horse.ogg" type="audio/ogg"> 
      <source src="horse.mp3" type="audio/mpeg"> 
      Your browser does not support the audio element. 
     </audio> 
    </body> 
</html> 

と私の正規表現は、次のとおりです。

final Pattern pattern = Pattern.compile("(<rt>(.+?)</rt>)|(?=(\\b(\\w*\\S)\\b)<rp>)"); 
final Pattern pattern2 = Pattern.compile("(?=(\\b(\\w*\\S)\\b)<rp>)"); 
final Matcher matcher = pattern.matcher(fromFile); 
final Matcher matcher2 = pattern2.matcher(fromFile); 
while(matcher.find()) { 
    matcher2.find(); 
    fromFile = "<font class=\"ruby\" title=\"" + matcher.group(1) + "\"" + ">" + matcher2.group(1) + "</font>"; 

    break; 
} 
if((matcher.find()) != true) { 
    System.out.println(fromFile); 
} 

私は単純にのみ使用し、それをしたいのですが1つの正規表現は同じ出力を生成します。 最初の正規表現は<rt></rt>の中の要素を抽出し、2番目の正規表現はタグ<rp>の前にデータを取得します。割り当てられたデータはmatcher.group(1)matcher2.group(1)です。

答えて

0

あなたは

Pattern pattern = Pattern.compile("(\\S+)<rp>.*<rt>(\\S+)<\\/rt>.*"); 
を解析し、完全なコードに行ずつ実行して

List<String> lines = null; 
    try (BufferedReader br = new BufferedReader(new FileReader(new File("pathToFile")))) { 
     lines = br.lines().collect(Collectors.toList()); //File content to List<String> 
    } 
    Pattern pattern = Pattern.compile("(\\S+)<rp>.*<rt>(\\S+)<\\/rt>.*"); 
    for (String line : lines) { 
     Matcher matcher = pattern.matcher(line); 
     while (matcher.find()) { 
      System.out.println(matcher.group(1) + " " + matcher.group(2)); 
     } 
    } 

出力

text1 textA 
text2 textB 
text3 textC 
+0

感謝を同じライン上の文字列の両方にマッチする正規表現を書くことができます@サラバナ! –

関連する問題