正規表現キャプチャあれこれ


正規表現のキャプチャの利用例

「@+数字」を抜き出したい

String target = 'テスト@123テスト'

pattern myPattern = pattern.compile('@[0-9]');
matcher myMatcher = myPattern.matcher(target);

if (myMatcher.find()) {
    System.debug(myMatcher.group());
}
/** Log
 *
 * @123
 * /

「@+数字」を抜き出したい(一致が複数あり)

上記のifの部分をwhileループに変更

String target = 'テスト@123テスト@456'

pattern myPattern = pattern.compile('@[0-9]');
matcher myMatcher = myPattern.matcher(target);

Integer i = 1;
while (myMatcher.find()) {
    System.debug(String.valueOf(i) + '番目: ' + myMatcher.group());
    i++;
}
/** Log
 *
 * 1番目: @123
 * 2番目: @456
 * /

「@+数字」の数字部分を抜き出したい

groupの引数を設定

String target = 'テスト@123テスト456'

pattern myPattern = pattern.compile('@([0-9])');
matcher myMatcher = myPattern.matcher(target);

Integer i = 1;
while (myMatcher.find()) {
    System.debug(String.valueOf(i) + '番目: ' + myMatcher.group(1));
    i++;
}
/** Log
 *
 * 1番目: 123
 *
 * 456は出力されない
 * /

「@+数字+英語」の数字+英語と数字と英語部分をそれぞれ抜き出したい

上記の応用
groupの引数を諸々設定(引数なしと0の結果は同じ)

String target = 'テスト@123ABCテスト@456'

pattern myPattern = pattern.compile('@(([0-9])([A-Z]))');
matcher myMatcher = myPattern.matcher(target);

Integer i = 1;
while (myMatcher.find()) {
    System.debug(String.valueOf(i) + '番目グループ空白該当 : ' + myMatcher.group());
    System.debug(String.valueOf(i) + '番目グループ0該当 : ' + myMatcher.group(0));
    System.debug(String.valueOf(i) + '番目グループ1該当 : ' + myMatcher.group(1));
    System.debug(String.valueOf(i) + '番目グループ2該当 : ' + myMatcher.group(2));
    System.debug(String.valueOf(i) + '番目グループ3該当 : ' + myMatcher.group(3));
    i++;
}
/** Log
 *
 * 1番目グループ空白該当 : @123ABC
 * 1番目グループ0該当    : @123ABC
 * 1番目グループ1該当    : 123ABC
 * 1番目グループ2該当    : 123
 * 1番目グループ3該当    : ABC
 *
 * @456については出力されない
 * /