2009-08-23 16 views
3

Regexpで文字列を解析して、その中からパラメータを取得しようとしています。一例として、 :Java Stringparsing with Regexp

 
String regexp = "TestString(.*?) with second test (.*?)"; 
String res = "TestStringpart1 with second test part2"; 

Pattern pattern = Pattern.compile(regexp); 
Matcher matcher = pattern.matcher(res); 
int i = 0; 
while(matcher.find()) { 
    i++; 
    System.out.println(matcher.group(i)); 
} 

しかし、それは唯一の "パート1" 誰かが私にヒントを与えるだろうが出力さ:

 
String: "TestStringpart1 with second test part2" 
Result should be: String[] {"part1", "part2"} 
Regexp: "TestString(.*?) with second test (.*?)" 

マイTestcodeでしたか?

おかげ

+0

あなたは、テストケースに対してあなたREGEXを確認するには、次のサイトを利用することができますhttps://regex101.com/それだった – luizfzs

答えて

2

は、いくつかの修正正規表現

String regexp = "TestString(.*?) with second test (.*)"; 

なるとのprintlnコードを変更することがあり..

if (matcher.find()) 
    for (int i = 1; i <= matcher.groupCount(); ++i) 
     System.out.println(matcher.group(i)); 
+0

感謝。 – mknjc

1

さて、あなたは今まで、あなたの元のコードでは...にそれを頼みますfindは正規表現全体をのマッチから次のマッチにシフトさせますが、whileの体の中では1つのグループしか抜けません。実際には、あなたの文字列に正規表現の複数の一致があったなら、あなたは最初の発生のために、 "part1"を得て、2番目の発生のためには "part2"それ以外の参照はエラーになります。

while(matcher.find()) { 

    System.out.print("Part 1: "); 
    System.out.println(matcher.group(1)); 

    System.out.print("Part 2: "); 
    System.out.println(matcher.group(2)); 

    System.out.print("Entire match: "); 
    System.out.println(matcher.group(0)); 
}