- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:java正規表現 matchesがおかしい(バージョンの違い?))
java正規表現のバージョンの違いによるmatchesの不具合
このQ&Aのポイント
- Javaの正規表現において、matchesメソッドが上手く動作しない問題が発生しています。
- 詳細なケースは以下の通りです。バージョンの違いによる影響の可能性もあります。
- 質問者はjre1.6とeclipse3.5を使用しており、この環境で発生していると報告しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Helloで始まっているかどうかをmatchesメソッドでそのプログラムのように調べる場合のパターンは、 "^Hello.*" になる。これは「Helloで始まりその後に任意の文字が0文字以上続く」の意。 matchesメソッドはAPIのドキュメントに、 > 領域全体をこのパターンとマッチします。 とあるように質問のプログラムでは、検索対象の "Hello World. This is regex sample." 全体が "^Hello" とマッチするかどうかを調べるので当然falseになる。 findメソッドを使えばマッチする部分シーケンスを順次検索できるので、"^Hello" をパターンとして与えても1回目のfindの呼び出しでは先頭の"Hello"の部分にマッチしてtrueを返す。
その他の回答 (2)
- vaguechat
- ベストアンサー率85% (47/55)
回答No.3
たびたびで申し訳ない。 matchesを利用する場合なら#1で書いた"^Hello.*"でなく"Hello.*"でもいい。 matchesは入力全体とマッチするかどうかなので"^"を指定しなくてもHelloで始まらない入力に"Hello.*"はマッチしない。 findの場合は部分にマッチするので"^"の有無は意味が変わる。
- vaguechat
- ベストアンサー率85% (47/55)
回答No.2
補足 java.util.regexパッケージが導入されたのは1.4からだが、matchesメソッドの「パターンを入力全体とマッチさせる」という機能が変更されたことはないはずなのでバージョンによる結果の差異もないはず。