部分一致と全体一致の違い
・Matcher#matches()は入力シーケンス全体にマッチする。
・Matcher#find()は入力シーケンスの部分にマッチする。
1 2 3 4 |
String targetText = "0123456789"; Pattern pattern = Pattern.compile("[0-9]+"); Matcher matcher = pattern.matcher(targetText); System.out.println("matcher.matches():"+matcher.matches());//true |
1 2 3 4 5 |
String targetText = "0123456789"; Pattern pattern = Pattern.compile("[0-9]"); Matcher matcher = pattern.matcher(targetText); System.out.println("matcher.matches():"+matcher.matches());//false //matches()は部分にマッチしない。 |
1 2 3 4 5 |
String targetText = "0123456789"; Pattern pattern = Pattern.compile("[0-9]"); Matcher matcher = pattern.matcher(targetText); System.out.println("matcher.find():"+matcher.find());//true //find()は部分にマッチする。 |
1 2 3 4 5 |
String targetText = "0123456789"; Pattern pattern = Pattern.compile("^[0-9]+$"); Matcher matcher = pattern.matcher(targetText); System.out.println("matcher.find():"+matcher.find());//true //find()は全体にもマッチする。 |
前回の検索処理結果を引きずるかどうかの違い
・Matcher#matches()は引きずらない。
・Matcher#find()は引きずる。
public boolean find()
入力シーケンスからこのパターンとマッチする次の部分シーケンスを検索します。
このメソッドは、正規検索エンジンの領域の先頭から開始されます。ただし、前回の呼出しが正常に終了してから正規表現エンジンがリセットされていない場合は、前回のマッチで一致しなかった最初の文字から開始されます。マッチが成功した場合は、start、end、およびgroupメソッドを使用して詳細情報を取得できます。
戻り値:
入力シーケンスの部分シーケンスがこの正規表現エンジンのパターンとマッチした場合にのみtrue
1 2 3 4 5 |
String targetText = "0123456789"; Pattern pattern = Pattern.compile("[0-9]+"); Matcher matcher = pattern.matcher(targetText); System.out.println("matcher.matches():"+matcher.matches());//true System.out.println("matcher.matches():"+matcher.matches());//true |
1 2 3 4 5 6 |
String targetText = "0123456789"; Pattern pattern = Pattern.compile("[0-9]+"); Matcher matcher = pattern.matcher(targetText); System.out.println("matcher.matches():"+matcher.matches());//true System.out.println("matcher.find():"+matcher.find()); //false //matches()が成功したため、find()が探す残り部分が無くなった。 |
1 2 3 4 5 6 |
String targetText = "0123456789"; Pattern pattern = Pattern.compile("[0-9]+"); Matcher matcher = pattern.matcher(targetText); System.out.println("matcher.find():"+matcher.find()); //true System.out.println("matcher.matches():"+matcher.matches());//true //matches()はfind()が何しようとキニシナイ。 |
1 2 3 4 5 6 |
String targetText = "0123456789"; Pattern pattern = Pattern.compile("[0-9]+"); Matcher matcher = pattern.matcher(targetText); System.out.println("matcher.find():"+matcher.find());//true System.out.println("matcher.find():"+matcher.find());//false //1回目のfind()がtargetTextを食い尽くす(greedy)ため、2回目のfind()はすることが無い。 |
1 2 3 4 5 6 7 |
String targetText = "0123456789"; Pattern pattern = Pattern.compile("[0-9]+"); Matcher matcher = pattern.matcher(targetText); System.out.println("matcher.find():"+matcher.find());//true matcher.reset(); System.out.println("matcher.find():"+matcher.find());//true //検索処理をリセットしてやればどっちもひっかかる。 |
1 2 3 4 5 6 |
String targetText = "0123456789"; Pattern pattern = Pattern.compile("[0-9]+?"); Matcher matcher = pattern.matcher(targetText); System.out.println("matcher.find():"+matcher.find());//true System.out.println("matcher.find():"+matcher.find());//true //最小マッチなのでどっちもひっかかる。 |