Javaの正規表現\Gメタ文字とは?前回のマッチ終了位置にマッチする特殊文字
Javaの正規表現におけるメタ文字「\G」は、前回のマッチが終了した位置にマッチします。通常の正規表現は文字列内の任意の位置でマッチを試みますが、「\G」を指定すると、直前のマッチの終了地点からしかマッチできなくなります。この特性を利用すると、文字列の先頭から連続したパターン(例:連続する数字)だけを効率的に抜き出すことができます。
サンプルコード
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String args[]) {
String regex = "\\G[0-9]";
Scanner sc = new Scanner(System.in);
System.out.println("文字列を入力してください: ");
String input = sc.nextLine();
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
int count = 0;
System.out.println("前回のマッチに続く数字:");
while(m.find()) {
System.out.print(m.group());
count++;
}
System.out.println();
System.out.println("マッチ数: "+count);
}
}実行結果
文字列を入力してください: 555 sample text 前回のマッチに続く数字: 555 マッチ数: 3
このプログラムでは、正規表現「\G[0-9]」をコンパイルして使用しています。「\G」の制約により、各マッチは必ず前回のマッチの終了位置から開始する必要があります。そのため、入力「555 sample text」に対しては、先頭の連続した数字「555」だけが3回のマッチとして検出され、空白以降のテキストは一切マッチしません。
なお、最初のマッチの時点ではまだ「前回のマッチ」が存在しないため、「\G」は文字列の先頭と同じ位置として扱われます。この仕組みによって、文字列の先頭から順に条件を満たす部分だけを確実に取り出すことが可能です。ログ解析や固定長データの読み込みなど、位置関係が重要になる処理で特に役立つメタ文字です。
-
Javaの正規表現における$(ドル)メタ文字の使い方
正規表現におけるサブ表現(メタ文字)「$」は、行の末尾に一致します。パターンの最後に「$」を置くことで、指定した文字列で終わるテキストだけをマッチさせることができます。なお、デフォルトでは「$」は入力全体の末尾に一致しますが、Pattern.MULTILINEフラグを有効にすると、行区切り文字(改行など)の直前にも一致するようになります。例1:行末の一致を確認する次のJavaプログラムでは、「Tutorialspoint」という文字列で終わる入力に対して、正規表現「Tutorialspoint$」が何回一致するかを数えています。import java.util.regex.Matcher; i
-
Java正規表現のメタ文字「^(キャレット)」の使い方を解説
正規表現におけるサブ式(メタ文字)「^」は、行の先頭にマッチします。この記号を正規表現の中で使用すると、入力文字列の中でその後に続くパターンが行頭から始まる場合に一致とみなされます。 例1:行頭のパターンにマッチするか確認する 次のサンプルコードでは、入力文字列が「Hi how are you」というフレーズで始まっているかどうかを「^」を使って判定しています。 import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExample { public static void m