文字列の先頭からパターンとマッチするか調べる(Matcher.lookingAt)

Matcher クラスの lookingAt メソッドは、対象の文字列の先頭からパターンとマッチするかどうかを調べます。先頭文字からマッチする必要はありますが、 matches メソッドのように文字列全体とマッチする必要はありません。ここでは Java の正規表現で lookingAt メソッドを使って文字列の先頭からパターンとマッチするか調べる方法について解説します。

(Last modified: )

lookingAtメソッドの使い方

Matcher クラスの lookingAt メソッドは対象の文字列の先頭からパターンにマッチするかどうかを調べます。書式は次の通りです。

public boolean lookingAt()

戻り値:
入力シーケンスの接頭辞がこの正規表現エンジンのパターンとマッチした場合にのみtrue

Matcher オブジェクトのパターンが対象の文字列の先頭からマッチすれば true 、そうでなければ false が戻り値として返ります。文字列全体とマッチする必要はありませんが、必ず先頭文字からマッチしなければなりません。

次のサンプルを見てください。

// java.util.regex.*のインポートが必要です
import java.util.regex.*;

String regex = "港区";
Pattern p = Pattern.compile(regex);

Matcher m1 = p.matcher("港区役所");
System.out.println(m1.lookingAt());  // true

Matcher m2 = p.matcher("東京都港区");
System.out.println(m2.lookingAt());  // false

パターン文字列が "港区" で対象の文字列が "港区役所" だった場合、パターンは対象の文字列の先頭からマッチするので true となります。また対象の文字列が "東京都港区" だった場合、パターンは対象の文字列の一部とマッチしますが先頭文字からではないため false となります。

lookingAtメソッドの使い方(1)

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample7-1.java という名前で保存します。

import java.util.regex.*;

class JSample7_1{
  public static void main(String[] args){
    String regex = "[0-9]{2}";
    Pattern p = Pattern.compile(regex);

    String[] target = {"AAZ02", "75PPT", "ON24KM"};
    for (int i = 0 ; i < 3 ; i++){
      Matcher m = p.matcher(target[i]);
      if (m.lookingAt()){
        System.out.println(target[i] + "は" + m.group() + "の部分とマッチしました");
      }else{
        System.out.println(target[i] + "はマッチしませんでした");
      }
    }
  }
}

コンパイルを行います。

javac -encoding UTF-8 JSample7_1.java

その後で、次のように実行してください。

java JSample7_1

lookingAtメソッドの使い方(2)

パターン文字列 "[0-9]{2}" は任意の数値が 2 つ連続する文字列とマッチします。 lookingAt メソッドを使ってパターンが対象の文字列の先頭からマッチするかどうかを調べて画面に表示しました。マッチした場合はマッチした部分も併せて表示しています。(groupメソッドについては「パターンとマッチした部分文字列の情報を取得する」で解説します)。

-- --

Java の正規表現で lookingAt メソッドを使って文字列の先頭からパターンとマッチするか調べる方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。