マッチャを作成しターゲット文字列にマッチさせる

パターンオブジェクトを作成したら、次はターゲットとなる文字列を対象にしてマッチするかどうかを調べます。この時に使用するのがマッチャです。マッチャはパターンを使ってターゲットの文字列に対して様々な操作を行うオブジェクトです。

マッチャはjava.util.regex.Matcherクラスで定義されています。このクラスはコンストラクタは用意されておらず、Patternクラスで定義されているmatcherを使って作成します。

matcher
public Matcher matcher(CharSequence input)
指定された入力とこのパターンをマッチする正規表現エンジンを作成します。

パラメータ:
  input - マッチされる文字シーケンス 
戻り値:
  このパターンの新しい正規表現エンジン

引数にはターゲットとなる文字列を、CharSequenceインターフェースを実装したクラスのオブジェクトを指定して下さい。Stringクラスなどが該当します。

例えば次のように記述します。

String str = "abcdef";
String regex = "abc";
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(str);

この場合、"abc"で表されるパターンとターゲットの文字列である"abcdef"を対象としたマッチャが作成されます。

java.util.regex.Matcherクラス

マッチャが作成されたら、マッチャに対して様々な操作を指示できます。

例えば、ターゲットの文字列にパターンを適用しマッチしているかどうか調べるにはMatcherクラスで定義されているfindメソッドを使います。

find
public boolean find()
入力シーケンスからこのパターンとマッチする次の部分シーケンスを検索します。

このメソッドは、正規検索エンジンの領域の先頭から開始されます。 ただし、前回の呼び出しが正
常に終了してから正規表現エンジンがリセットされていない場合は、前回のマッチで一致しなかった
最初の文字から開始されます。

マッチが成功した場合は、start、end、および group メソッドを使用して詳細情報を取得できます。

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

作成したマッチャオブジェクトに対してこのメソッドを実行すると、ターゲット文字列がパターンにマッチしているかどうか調べ結果をboolean型の値で返します。

例えば次のように記述します。

String str = "abcdef";
String regex = "abc";
Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(str);
if (m.find()){
  System.out.println("マッチしました");
}

他にも数多くのメソッドが用意されており、ターゲット文字列のどの位置からマッチしたかどうか、実際にマッチした文字列はどの部分なのかなどをマッチャを通して取得することができます。

サンプルプログラム

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

JSample3_1.java

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

class JSample3_1{
  public static void main(String args[]){
    String str1 = "stat[01]end";
    String str2 = "array[int]";

    String regex = "¥¥[.*¥¥]";
    Pattern p = Pattern.compile(regex);

    check(p, str1);
    check(p, str2);
  }

  private static void check(Pattern p, String target){
    Matcher m = p.matcher(target);

    if (m.find()){
      System.out.println("マッチします");
      System.out.println("マッチした部分は " + m.group() + " です");
    }else{
      System.out.println("マッチしません");
    }
  }
}

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

p3-1

今回は"["で始まり"]"で終わる文字列があるかどうかのパターンを作成しマッチするかどうか調べています。またマッチした場合は、ターゲット文字列の中で実際にマッチした部分を表示しています。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值