正規表現パターン(Pattern オブジェクト)の、Pattern#matcher(str) メソッドを使用すると、その正規表現が、渡した文字列の中に存在するかを調べることができます。
また、正規表現に実際に一致した部分文字列を抽出することもできます。
正規表現パターンの中で括弧を使ってグルーピングしておくと、それらのパターンに一致した部分文字列を個別に抽出することができます。
Pattern#matcher(str) を使用すると、マッチング結果を取得するための Matcher オブジェクトを取得することができます。
Matcher.find() は、パターンに一致する部分文字列が見つかるたびに true を返します。
// import java.util.regex.Matcher;
// import java.util.regex.Pattern;
// 正規表現パターンを作成
Pattern p = Pattern.compile("(B+(C+)(D+))(E+)");
// マッチング
Matcher m = p.matcher("AAABBBCCCDDDEEEFFF");
// 先頭からマッチングを繰り返す(ここでは一回しかマッチしない)
while (m.find()) {
// マッチした部分をグループごとに抜き出す
for (int i = 0; i < m.groupCount(); i++) {
System.out.println("(" + i + ") = " + m.group(i));
}
}
(0) = BBBCCCDDDEEE
(1) = BBBCCCDDD
(2) = CCC
(3) = DDD
Matcher#group(0) は、正規表現パターンに一致した部分文字列全体を返します。Matcher#group(N) は、N 番目の左括弧で囲まれた部分のパターンに一致した部分文字列を返します(N は1から始まります)。以下の例では、< と > で囲まれている部分を順番に抜き出しています。
最短一致でマッチングさせるために、.+ ではなく .+? というパターンを使用することに注意してください(ここを間違えると、文字列全体に一致してしまいます)。
パターンに一致する文字列が見つかるごとに Matcher#find() メソッドは true を返すため、下記のように while ループで処理することによって、パターンに一致する部分をすべて抽出することができます。
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
String input = "<one> AAA <two> BBB <three>";
Pattern p = Pattern.compile("<(.+?)>");
Matcher m = p.matcher(input);
while (m.find()) {
System.out.println(m.group(0)); // 括弧を含めて抽出(例: <one>)
System.out.println(m.group(1)); // 括弧を除いて抽出(例: one)
}
<one>
one
<two>
two
<three>
three
Matcher#group(0) は、パターン全体に一致する部分を表すので、< と > を除いた部分を取得するには、上記のように、パターン文字列内で括弧(( と ))を使って抽出部分をグルーピングしておき、Matcher#group(1) で取得する必要があることに注意してください。