リージョンの位置を取得

広告

現在どの位置にリージョンが設定されているのかを取得する方法を確認します。

リージョンの開始インデックスを取得するにはMatcherクラスで定義されているregionStartメソッドを使用します。

この正規検索エンジンの領域の開始インデックスをレポートします。この正規検索エンジンが行う
検索は、regionStart (その値も含む) と regionEnd (その値を含まない) の内部でのマッチ検索に
制限されます。 

戻り値:
  この正規検索エンジンの領域の始点

リージョンの終了インデックスを取得するにはMatcherクラスで定義されているregionEndメソッドを使用します。

この正規検索エンジンの領域の終了インデックス (その値を含まない) をレポートします。この正規
検索エンジンが行う検索は、regionStart (その値も含む) と regionEnd (その値を含まない) の内
部でのマッチ検索に制限されます。 

戻り値:
  この正規表現エンジンの領域の終点

メソッドを実行することで、現在設定されているリージョンの開始インデックスと終了インデックスをそれぞれ取得できます。なおregionメソッドを使って明示的に設定する前は、開始インデックスは文字列の先頭を表す0、終了インデックスは文字列の最後を表す文字列数に設定されています。

デフォルトのregionEndメソッドの戻り値はターゲット文字列の最後なので、開始インデックスだけ指定したい場合は次のように記述することができます。

String str = "border width is 100px, and border height is 80px";
String regex = "¥¥d+";
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(str);
m.region(10, m.regionEnd());

また、例えば開始インデックスは現在のままで、終了インデックスだけ別の値を指定する場合は次のように記述できます。

String str = "border width is 100px, and border height is 80px";
String regex = "¥¥d+";
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(str);
m.region(10, 48);

/* ... */

Matcher m = p.matcher(str);
m.region(m.regionStart(), 24);

regionメソッドは常に開始インデックスと終了インデックスの両方を指定する必要があるため、regionStartメソッドとregionEndメソッドを使うと便利です。

サンプルプログラム

では実際に試してみます。

JSample2_1.java

import java.util.regex.Pattern;
import java.util.regex.Matcher;

class JSample2_1{
  public static void main(String args[]){
    String str = "border width is 100px, and border height is 80px";

    String regex = "¥¥d+px";
    Pattern p = Pattern.compile(regex);

    System.out.println("パターン : " + regex);
    System.out.println("ターゲット文字列 : ¥"" + str + "¥"");

    Matcher m = p.matcher(str);

    int start = m.regionStart();
    int end = m.regionEnd();

    System.out.println("¥nデフォルトのままマッチ:");
    System.out.println("region : ¥"" + str.substring(start, end) + "¥"");

    if (m.find()){
      System.out.println("match:" + m.group());
    }else{
      System.out.println("×");
    }

    m.region(24, m.regionEnd());

    System.out.println("¥n開始インデックスを 24 に設定:");
    System.out.println("region : ¥"" + str.substring(24, m.regionEnd()) + "¥"");

    if (m.find()){
      System.out.println("match:" + m.group());
    }else{
      System.out.println("× ");
    }
  }
}

ではコンパイルを行った上で実行してみます。

p2-1

( Written by Tatsuo Ikura )