2015-11-11 15 views
6

同等のJavaコードは、一致しなかったしかし、私は次の正規表現(link正規表現はオンラインテスター上で動作しますが、

[\d\.]+[ ](.*?)[ ]{2,}(.+) 

を持ってJavaで失敗:

String REGEX = "[\\d\\.]+[ ](.*?)[ ]{2,}(.+)"; 
Pattern pattern = Pattern.compile(REGEX); 
String line = "1. QUEEN     WE ARE THE CHAMPIONS" 
Matcher matcher= pattern.matcher(line); 
String artist = matcher.group(0); 
String song = matcher.group(1); 

をIに」何が間違っているのか分かりません。

+2

「マッチ」または「検索」の実際の呼び出しはどこですか? – RealSkeptic

+1

@ᴘᴀɴᴀʏɪᴏᴛɪsグループ1とグループ2を使ってはいけませんか? – Biffen

+1

あなたの最初のスペースが文字クラスに含まれているのはなぜですか?[] '? '[\ d \。] +'と '(。*?) 'をリテラルスペースで区切っても効果的です。 –

答えて

5

最初の試合に移動するには、findに電話する必要があります。 group()を呼び出す前にmatcher.find();を追加してください。

これを実行すると、コードは正常に動作します。

+0

ああ、「一致するものは見つかりませんでした」という例外は、私のパターンが何らかの形で間違っていて、一致しなかったと誤解していました。ありがとうございました! –

1

グループの前にmatcher.matches()を呼び出す必要があります。

if(matcher.matches()){ 
     String artist = matcher.group(0); 
     System.out.println(artist); 
     String song = matcher.group(1); 
     System.out.println(song); 
     } 
関連する問題