• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:java正規表現 matchesがおかしい(バージョンの違い?))

java正規表現のバージョンの違いによるmatchesの不具合

このQ&Aのポイント
  • Javaの正規表現において、matchesメソッドが上手く動作しない問題が発生しています。
  • 詳細なケースは以下の通りです。バージョンの違いによる影響の可能性もあります。
  • 質問者はjre1.6とeclipse3.5を使用しており、この環境で発生していると報告しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • vaguechat
  • ベストアンサー率85% (47/55)
回答No.1

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メソッドの「パターンを入力全体とマッチさせる」という機能が変更されたことはないはずなのでバージョンによる結果の差異もないはず。

関連するQ&A