重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

java正規表現 matchesがおかしい(バージョンの違い?)

正規表現を学びだしたところなのですが、patternのmatchesが上手くいきません。
このページ
http://www.site-cooler.com/java/j2se/regex.htm
に書かれている、

Pattern pattern = Pattern.compile("^Hello");
Matcher matcher = pattern.matcher("Hello World. This is regex sample.");
boolean blnMatch= matcher.matches();
System.out.println(blnMatch);

を実行してもfalseが返ってきてしまいます。
これはバージョンの違いからくるものなのでしょうか?

ちなみに私はjre1.6でeclipse3.5を使用しています。

回答をよろしくお願いします。

A 回答 (3件)

Helloで始まっているかどうかをmatchesメソッドでそのプログラムのように調べる場合のパターンは、


"^Hello.*"
になる。これは「Helloで始まりその後に任意の文字が0文字以上続く」の意。
matchesメソッドはAPIのドキュメントに、
> 領域全体をこのパターンとマッチします。
とあるように質問のプログラムでは、検索対象の "Hello World. This is regex sample." 全体が "^Hello" とマッチするかどうかを調べるので当然falseになる。
findメソッドを使えばマッチする部分シーケンスを順次検索できるので、"^Hello" をパターンとして与えても1回目のfindの呼び出しでは先頭の"Hello"の部分にマッチしてtrueを返す。
    • good
    • 0

たびたびで申し訳ない。


matchesを利用する場合なら#1で書いた"^Hello.*"でなく"Hello.*"でもいい。
matchesは入力全体とマッチするかどうかなので"^"を指定しなくてもHelloで始まらない入力に"Hello.*"はマッチしない。
findの場合は部分にマッチするので"^"の有無は意味が変わる。
    • good
    • 0

補足


java.util.regexパッケージが導入されたのは1.4からだが、matchesメソッドの「パターンを入力全体とマッチさせる」という機能が変更されたことはないはずなのでバージョンによる結果の差異もないはず。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!