正規表現の利用方法

広告

まず正規表現をどのような時に使用するのかを簡単に確認しておきます。

ある文字列が他の文字列と一致するかどうか調べるには、Stringクラスで定義されているequalsメソッドを使います。

この文字列と指定されたオブジェクトを比較します。引数が null でなく、このオブジェクトと同じ
文字シーケンスを表す String オブジェクトである場合にだけ、結果は true になります。

パラメータ:
  anObject - この String と比較されるオブジェクト 
戻り値:
  指定されたオブジェクトがこの文字列に等しい String を表す場合は true、そうでない場合は 
    false

例えば次のように使います。

String str = "Hello";

if (str.equals("Hello")){
  System.out.println("文字列はHelloです");
}else{
  System.out.println("文字列はHelloとは違います");
}

このサンプルでは変数に格納された文字列と"Hello"を比較し、完全に一致するかどうかを調べます。今回の場合は一致しますので「文字列はHelloです」と出力されることになります。

このように完全に一致しているかどうかを調べるだけならばequalsメソッドを使うことで判定が出来ます。

では次に対象の文字列に"e"で始まり"o"で終わる文字列が含まれているかどうかを調べるにはどうすればいいでしょうか。このような条件を満たす文字列は数限りなく存在します。例えば次のような文字列です。

eo
eao
poebon
eabogon
abbdddeeebo
Hello

強引に調べるのであれば文字列の中に"e"と"o"が含まれているのを確認し"e"の方が先に記述されているかどうかを調べるといった方法でも可能です。ただもっと複雑な条件になった場合には大変ですし、条件毎に調べるアルゴリズムを考え、検証しなければなりません。

このような時、正規表現を使用することで簡潔に調べることができます。正規表現では調べたい条件をパターンと呼びますが、先ほどの"e"で始まり"o"で終わるパターンは次のように表すことが出来ます。

"e.*o"

このパターンは「"e"で始まり任意の文字が0回以上繰り返された後で"o"が出現する」というパターンとなります。パターンを定義したら今度は対象の文字列にパターンに一致する文字列があるかどうかを調べます。正規表現では対象の文字列がパターンに一致した文字列を含んでいた場合、「パターンにマッチした」と言います。

詳しい記述方法は次のページ以降で確認していきますが、次のように記述します。

String str = "poebon";
String regex = "e.*o";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);

if (m.find()){
  System.out.println("マッチしました");
}else{
  System.out.println("マッチしません");
}

正規表現を使えば条件式をパターンとして表しさえすれば後は同じ手順でマッチするかどうか確認できます。またパターンを簡単に作成できるように便利な構文が多く用意されています。

では次のページ以降で正規表現の実際の使い方を確認していきます。

サンプルプログラム

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

JSample1_1.java

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

class JSample1_1{
  public static void main(String args[]){
    String str1 = "Hello";
    String str2 = "Hey";

    String regex = "e.*o";
    Pattern p = Pattern.compile(regex);

    Matcher m1 = p.matcher(str1);

    System.out.print(str1 + " は");
    if (m1.find()){
      System.out.println("マッチします");
    }else{
      System.out.println("マッチしません");
    }

    Matcher m2 = p.matcher(str2);

    System.out.print(str2 + " は");
    if (m2.find()){
      System.out.println("マッチします");
    }else{
      System.out.println("マッチしません");
    }
  }
}

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

p1-1

なお今後作成するサンプルは全て文字コードをUTF-8で保存してあります。

( Written by Tatsuo Ikura )