(1) Javaで正規表現の使い方をご紹介
(1-1) 正規表現とは?
(1-2) Javaでの正規表現の使い方
(1-3) サンプルプログラム
(1) Javaで正規表現の使い方をご紹介
(1-1) 正規表現とは?
正規表現は部分的なパターンマッチングを行うために非常に便利な仕組みです。
例えば「Boeing777’s first flight was in 1994」という文字列があったとして、そこから「数字3桁」を抜き出したいとします。これは正規表現を使う事で簡単に実現できて「\d{3}」というパターンが「数字3桁」を意味するので「\d{3}の正規表現にマッチする」という条件で探すと文字列中の数字3桁(「777」と「199」)が発見できます。
(図111)
正規表現は奥が深く、組み合わせ次第であらゆるパターンの部分一致照合が可能になりますが、今回は入門編のため、そこについては余り深く触れません(すみません)。代わりといってはなんですが、当記事では「Javaプログラムでの正規表現の使い方」をご紹介いたします。
(1-2) Javaでの正規表現の使い方
(1-2-1) STEP1.正規表現の定義
(1-2-2) STEP2.パターンobjectの生成
正規表現を実際に使うためには、正規表現をコンパイルする必要があります。正規表現をコンパイルした結果を「パターンobject」と呼んでおり、正規表現のコンパイルにはPatternクラスを使いますが、このクラスにはpublicのコンストラクタがなく、パターンの作成には「public static compile()」メソッドを使います(Pattern型を返却する)。
(STEP2)
Pattern pattern1 = Pattern.compile(regex);
(1-2-3) STEP3.照合の実行
Matcher matcher1 = pattern1.matcher(word);
(1-2-4) STEP4.照合結果の取得
//STEP4.照合結果の取得 while (matcher.find()) { System.out.print("マッチ開始:"+(matcher.start()+1)+"文字目 "); System.out.print("マッチ終了:"+(matcher.end()+1)+"文字目 "); System.out.println("マッチ文言:"+matcher.group()); }
メソッド名 | 説明 |
find() | 次の照合一致がある場合はtrueを返します。
(例) |
start() | 現在のマッチにおける、文字列のマッチ「開始位置」のインデックスをint型で返却します。インデックスは0スタートのため、実際のN文字目の一致箇所と対応させるには「+1」します。 |
end() | 現在のマッチにおける、文字列のマッチ「終了位置」のインデックスをint型で返却します。インデックスは0スタートのため、実際のN文字目の一致箇所と対応させるには「+1」します。 |
group() | 現在のマッチにおける、マッチ結果のテキストをString型で返却します。 |
(1-3) サンプルプログラム
これまでのSTEP1~STEP4までの手順を全てまとめて1つのプログラムとして実行可能な状態にまとめたものが以下です。
import java.util.regex.Matcher; import java.util.regex.Pattern; public class IT02xx_RegularExpresstionTest { public static void main(String args[]) { //前準備:照合対象の文字列 String word = "Boeing777's first flight was in 1994"; //STEP1.正規表現の定義 String regex= "\\d{3}"; //STEP2.パターンobjectの生成 Pattern pattern = Pattern.compile(regex); //STEP3.照合の実行 Matcher matcher = pattern.matcher(word); //STEP4.照合結果の取得 while (matcher.find()) { System.out.print("マッチ開始:"+(matcher.start()+1)+"文字目 "); System.out.print("マッチ終了:"+(matcher.end()+1)+"文字目 "); System.out.println("マッチ文言:"+matcher.group()); } } }
(図131)実行結果