質問: m.group(); System.out.println(matchstr + "の部分にマッチしました"); } //ここをコメントアウトするとgroupメソッドで例外発生 } } ``` findメソッドは単純な判定処理だと思っているのですが、それ以上の効力を発揮しているのでしょうか。 Java APIを見ると「マッチが成功した場合は、start、end、およびgroupメソッドを使用して詳細情報を取得できます。」と書いているのでやはりこのメソッドで判定しないとgroupメソッドが使えないということでしょうか。 ロジック的にどのような仕組みになっているのでしょうか。findメソッドとgroupメソッドは互いに孤立しているのでどのような作用が働いているのか知りたいです。 もし分かる方がいらっしゃればよろしくお願い致します。
回答: APIにはこうも書いてあります。 > > 正規表現エンジンは、パターンのmatcherメソッドを呼び出すことによって作成されます。一度作成すると、**次の3種類のマッチ操作**に使用できます。 > > matchesメソッドは、入力シーケンス全体とパターンをマッチする。 > > lookingAtメソッドは、入力シーケンスの先頭から始めてパターンをマッチする。 > > findメソッドは、入力シーケンスを走査して、パターンとマッチする次の部分シーケンスを検索する。 > > > PatternクラスのmatcherメソッドはMatcherを作成するだけで、マッチ操作はしません。いうなれば、文字列の探索の準備を整えただけです。マッチ操作が「実際に文字列を探す」という操作です。 そして、start,end,groupメソッドの説明には、すべて最初に**「前回のマッチ(操作)で」**という文言が入っています。 1回もマッチ操作をしていなければ当然「前回のマッチ」はありません。