正規表現
正規表現とは
様々な文字列を一つの文字列で表現する表記法
なぜ便利なのか
正規表現を利用すると様々な文字列を一つの文字列で表現できるため、文字列の検索や置換が便利になる。
例えば、以下の文字列は全て同じ正規表現で表すことができる。
apple orange grape lemon
[a-z]+
基本的な正規表現の記法については以下のページを参照:
Javaで正規表現を使用する
PatternクラスとMatcherクラスを使用する。
Pattern#compile()メソッドの引数に検証したい正規表現を与える。
作成したPatternのインスタンスからMatcherを作成する際に、検証対象の文字列を引数で与える。
Pattern pattern = Pattern.compile("^[A-Za-z0-9]+$"); Matcher matcher = pattern.matcher("value"); matcher.matches(); // true
置換
文字列の中の、特定のパターンの文字列を別の文字列に置き換える
String str = "あかまきがみあおまきがみきまきがみ" ; String pattern = "がみ" ; Pattern p = Pattern.compile(pattern); Matcher matcher = p.matcher(str) ; String newStr = matcher.replaceAll("紙"); System.out.println(newStr);
検索
ある文字列の中から、特定のパターンの文字列を探しだす
String str = "あかまきがみあおまきがみきまきがみ" ; String pattern = "がみ" ; Pattern p = Pattern.compile(pattern); Matcher matcher = p.matcher(str) ; while(matcher.find()){ int start = matcher.start(); System.out.println(start + "番目に見つけました"); }
分割
文字列の中から、特定のパターンで区切る
String str = "あかまきがみあおまきがみきまきがみ" ; String pattern = "がみ" ; Pattern p = Pattern.compile(pattern); for(String substr : p.split(str)){ System.out.println(substr); // あかまき, あおまき, きまき }
グループ
正規表現で定義したグループ(() で囲われた部分)について参照するには、以下のメソッドが用意されている
- groupCount() :正規表現で定義されたグループの数を取得する
- group() :直近のマッチ操作でマッチした文字列全体を取得する
- group(int) :直近のマッチ操作でマッチしたグループのうち、指定したインデックスのグループを取得する
group(int)メソッドにおいて、番号 0 はマッチした文字列全体なので、 group() と同じ結果を返す。
1 から先がマッチした部分文字列になる。