Java
 Computer >> コンピューター >  >> プログラミング >> Java

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個以上の任意の文字列にマッチし、「^」や「$」と組み合わせることで行頭・行末の条件を指定できる。
  1. Java正規表現(Regex)で固定文字セットにマッチさせる方法

    Javaの正規表現における文字クラスを使うと、あらかじめ定義しておいた固定の文字集合の中から「任意の1文字」にマッチさせることができます。たとえば、次のように記述します。 [tmp]:t、m、p のいずれか1文字にマッチします。 [^tp]:t と p 以外の任意の1文字にマッチします(先頭に ^ を付けると否定を意味します)。 角括弧 [ ] 内に候補となる文字を列挙すると、入力文字列の各位置についてその中のどれか1つが存在すればマッチが成立します。この仕組みを利用すると、「特定の文字が文字列内に何回出現するか」を簡単に数えることができます。 例1:指定した文字の出現回数をカウントする

  2. Javaで文字列に特定の文字が含まれているか確認する方法

    Javaでは、文字列の中に指定した文字が含まれているかどうかを、いくつかの方法で簡単に確認できます。本記事では、代表的な2つの方法である indexOf() メソッドと toCharArray() メソッドを使った文字検索の手法を、サンプルコード付きでわかりやすく解説します。 indexOf() メソッドを使う方法 Stringクラスの indexOf() メソッドを使うと、文字列の中から特定の文字を検索できます。このメソッドは、引数として渡した文字が文字列内で最初に出現する位置(インデックス)を int 型で返します。もし指定した文字が文字列中に存在しない場合は、-1 を返します。 したがっ