Java正規表現(RegEx)で任意の文字にマッチさせる方法
Javaの正規表現におけるメタ文字「.」(ドット)は、任意の1文字にマッチします。マッチ対象はアルファベットでも数字でも、記号などの特殊文字でも構いません。
メタ文字「.」の基本
「.」は改行文字以外のあらゆる単一文字と一致するため、パターンの柔軟性を高めたい場面で非常に便利です。なお、ドットそのもの(リテラルの「.」)にマッチさせたい場合は、バックスラッシュでエスケープして「\.」と記述します。
例1:任意の1文字とのマッチ
次のプログラムでは、ユーザーから入力された文字列に対して正規表現「.」を適用し、文字数をカウントしています。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String args[]) {
// ユーザーから文字列を読み込む
System.out.println("文字列を入力してください");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// 任意の文字にマッチする正規表現
String regex = ".";
// 正規表現をコンパイルする
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトを取得する
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println("入力された文字列は " + count + " 文字です。");
}
}実行結果
文字列を入力してください hello how are you welcome to tutorialspoint 入力された文字列は 42 文字です。
特定の位置に任意の文字を指定する
次のような正規表現を使うと、aとbの間にある任意の3文字にマッチさせることができます。
a...b
また、メタ文字「.」と量指定子「*」を組み合わせた「.*」という表現は、任意の個数(0個以上)の文字にマッチします。これにより、「先頭と末尾だけ条件を決めて、中身は何でもよい」といった柔軟なパターンが簡単に作れます。
例2:「.*」で複数文字にマッチさせる
次のJavaプログラムは、ユーザーから5つの文字列を読み込み、bで始まり、途中に任意の文字がいくつあってもよく、aで終わる文字列のみを受け入れます。
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 = "^b.*a$";
Scanner sc = new Scanner(System.in);
System.out.println("5つの文字列を入力してください:");
String input[] = new String[5];
for (int i=0; i<5; i++) {
input[i] = sc.nextLine();
}
// Patternオブジェクトを作成する
Pattern p = Pattern.compile(regex);
for(int i=0; i<5; i++) {
// Matcherオブジェクトを作成する
Matcher m = p.matcher(input[i]);
if(m.find()) {
System.out.println(input[i] + ":受け入れられました");
} else {
System.out.println(input[i] + ":受け入れられませんでした");
}
}
}
}実行結果
5つの文字列を入力してください: barbara boolean baroda ram raju barbara:受け入れられました boolean:受け入れられませんでした baroda:受け入れられました ram:受け入れられませんでした raju:受け入れられませんでした
まとめ
- 「.」は任意の1文字にマッチするメタ文字である。
- 「a...b」のように使えば、特定の文字の間に任意の文字が入るパターンを表現できる。
- 「.*」は0個以上の任意の文字列にマッチし、「^」や「$」と組み合わせることで行頭・行末の条件を指定できる。
-
Java正規表現(Regex)で固定文字セットにマッチさせる方法
Javaの正規表現における文字クラスを使うと、あらかじめ定義しておいた固定の文字集合の中から「任意の1文字」にマッチさせることができます。たとえば、次のように記述します。 [tmp]:t、m、p のいずれか1文字にマッチします。 [^tp]:t と p 以外の任意の1文字にマッチします(先頭に ^ を付けると否定を意味します)。 角括弧 [ ] 内に候補となる文字を列挙すると、入力文字列の各位置についてその中のどれか1つが存在すればマッチが成立します。この仕組みを利用すると、「特定の文字が文字列内に何回出現するか」を簡単に数えることができます。 例1:指定した文字の出現回数をカウントする
-
Javaで文字列に特定の文字が含まれているか確認する方法
Javaでは、文字列の中に指定した文字が含まれているかどうかを、いくつかの方法で簡単に確認できます。本記事では、代表的な2つの方法である indexOf() メソッドと toCharArray() メソッドを使った文字検索の手法を、サンプルコード付きでわかりやすく解説します。 indexOf() メソッドを使う方法 Stringクラスの indexOf() メソッドを使うと、文字列の中から特定の文字を検索できます。このメソッドは、引数として渡した文字が文字列内で最初に出現する位置(インデックス)を int 型で返します。もし指定した文字が文字列中に存在しない場合は、-1 を返します。 したがっ