1. ホーム

[解決済み】Java Regexのmatches()とfind()の違いについて

2022-04-16 15:47:48

質問

との違いを理解しようとしています。 matches() find() .

Javadocによると、(私が理解したところでは)。 matches() は、たとえ探しているものが見つかったとしても、文字列全体を検索します。 find() は、探しているものが見つかれば停止する。

この仮定が正しいのであれば、いつ、どのような場合に matches() の代わりに find() ただし、マッチの数を数えたい場合は、この限りではありません。

私の意見では、Stringクラスは以下のようになります。 find() ではなく matches() を組み込みのメソッドとして使用することができます。

では、まとめます。

  1. 私の仮説は正しいですか?
  2. を使うと便利なのはどんなときですか? matches() の代わりに find() ?

解決方法は?

matches は、文字列全体に対して式をマッチさせようとし、暗黙のうちに ^ を開始し $ をパターンの末尾に置くと、部分文字列を探さないことを意味します。したがって、このコードの出力は

public static void main(String[] args) throws ParseException {
    Pattern p = Pattern.compile("\\d\\d\\d");
    Matcher m = p.matcher("a123b");
    System.out.println(m.find());
    System.out.println(m.matches());

    p = Pattern.compile("^\\d\\d\\d$");
    m = p.matcher("123");
    System.out.println(m.find());
    System.out.println(m.matches());
}

/* output:
true
false
true
true
*/

123 の部分文字列です。 a123b ということで find() メソッドは真を出力します。 matches() を「見る」だけです。 a123b とは異なります。 123 となり、falseを出力します。