2017-06-12 16 views
-1

この正規表現グループがJAVAで私にとってうまくいかない理由を知りたいのですが?グループのマッチを見つけながら例外をスローしています。私は数字をダッシュ​​で区切って一致させようとしています。RegExパターンがJAVAで一致しない

Pattern p = Pattern.compile("([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)"); 
Matcher matcher = p.matcher("1-1-3-1-4"); 
matcher.group(0); // Exception happens here - java.lang.IllegalStateException: No match found 
+0

号を発見されたかどうかを示すブール値を返しますどちらが原因でこの問題が発生していますか? –

+0

'matcher()'を使っても実際には何もマッチしません。マッチャーを設定するだけです。 ['Matcher'メソッド(http://docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.html))のいずれかと照合するように指示する必要があります。 – ajb

+1

'matcher.find()'を使ってすべての出現を繰り返します。 –

答えて

4

は、あなたが実際に試合を取得するためにMatcher#find()を呼び出す必要があります:あなたは複数の一致を期待していた場合、あなたはifの文の代わりにwhileループを使用することができ

Pattern p = Pattern.compile("([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)"); 
Matcher matcher = p.matcher("1-1-3-1-4"); 
if (matcher.find()) { 
    System.out.println(matcher.group(0)) 
} 

また、あなたのパターンにはの5つのキャプチャグループが実際に存在します。キャプチャグループは、カッコ内にパターンの一部を配置することによって示されます。あなたのパターンに5つの区切り数字を個別にキャプチャするつもりがない場合は、正規表現エンジンではなく、にキャプチャすることが考えられます。これを使用する:

Pattern p = Pattern.compile("(?:[0-9]+)-(?:[0-9]+)-(?:[0-9]+)-(?:[0-9]+)-(?:[0-9]+)"); 

Demo

+0

このパターンと一致するはずですが、 –

+0

グループゼロはパターン全体と一致します。これには5つのキャプチャグループがあります。あなたがここで何をしようとしているかについてもっと教えていただけたら、私は自分の答えを更新することができます。 –

+0

私はmatcher.find()を使った後、それを手に入れました。ありがとう:) –

1

のJava正規表現でindex又はMatcherクラス一致返すために使用されるstudy方法:上記の例で

if (matcher.matches()) { 
    System.out.println(matcher.group(0)); 
} 

matches()"研究 "メソッドの試行t o指定されたパターンに対して領域全体を一致させます。どちらの方法を使用するかは、一般的にどのように一致させたいのかを示します。

マッチ()領域全体をこのパターンとマッチし

試み。

検索()パターンに一致する入力シーケンス の次のサブシーケンスを見つける

試み。

研究方法は、入力文字列を見直し、パターンは、特定の何かが取る場合は、ポイントを喜ばでし

http://docs.oracle.com/javase/tutorial/essential/regex/matcher.html

関連する問題