Java正規表現の「re?」メタ文字とは?意味と使い方をサンプルコード付きで解説
Javaの正規表現におけるメタ文字「re?」は、直前の文字やグループ(部分式)が0回または1回出現する場合にマッチすることを表します。つまり、直前の要素が「あってもなくてもよい」という意味になります。
例1:基本的なマッチ回数のカウント
次のプログラムでは、正規表現「Wel?」を使って入力文字列内のマッチ数を数えています。「l?」により、lがあってもなくてもマッチします。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main( String args[] ) {
String regex = "Wel?";
String input = "Welcome to Tutorialspoint";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
int count = 0;
while(m.find()) {
count++;
}
System.out.println("Number of matches: "+count);
}
}実行結果
Number of matches: 1
この例では、「Welcome」の中の「We」(lを含まない)または「Wel」に1回マッチしているため、マッチ数は1となります。
例2:ユーザー入力の検証
次のJavaプログラムは、ユーザーから文字列を受け取り、その文字列に英字(大文字・小文字両方)が含まれているかどうかを判定します。数字も許容されます。使用している正規表現は「[a-zA-Z][0-9]?」で、「英字1文字+任意の数字1桁」というパターンを表しています。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main( String args[] ) {
String regex = "[a-zA-Z][0-9]?";
Scanner sc = new Scanner(System.in);
System.out.println("Enter an input string: ");
String input = sc.nextLine();
//Patternオブジェクトの生成
Pattern p = Pattern.compile(regex);
//Matcherオブジェクトの生成
Matcher m = p.matcher(input);
if(m.find()) {
System.out.println("Match occurred");
} else {
System.out.println("Match not occurred");
}
}
}実行結果1
Enter an input string: sample text Match occurred
実行結果2
Enter an input string: sample text 34 56 Match occurred
実行結果3
Enter an input string: 32 89 45 63 Match not occurred
英字を含む入力(例1・例2)ではマッチが発生し、数字のみの入力(例3)ではマッチしないことが確認できます。このように「?」を使うことで、特定の文字が省略可能であるパターンを柔軟に記述できます。
-
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