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

Java正規表現(Regex)で固定文字セットにマッチさせる方法


Javaの正規表現における文字クラスを使うと、あらかじめ定義しておいた固定の文字集合の中から「任意の1文字」にマッチさせることができます。たとえば、次のように記述します。

  • [tmp]:t、m、p のいずれか1文字にマッチします。

  • [^tp]:t と p 以外の任意の1文字にマッチします(先頭に ^ を付けると否定を意味します)。

角括弧 [ ] 内に候補となる文字を列挙すると、入力文字列の各位置についてその中のどれか1つが存在すればマッチが成立します。この仕組みを利用すると、「特定の文字が文字列内に何回出現するか」を簡単に数えることができます。

例1:指定した文字の出現回数をカウントする

次のサンプルでは、ユーザーが入力した文字列から「t」「m」「p」のいずれかに該当する文字の出現回数を数えています。

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("Enter a String");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        //t、m、p のいずれか1文字にマッチする正規表現
        String regex = "[tmp]";
        //正規表現をコンパイル
        Pattern pattern = Pattern.compile(regex);
        //Matcherオブジェクトを取得
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while(matcher.find()) {
            count++;
        }
        System.out.println("Occurrences: "+count);
    }
}

出力結果

Enter a String
hello how are you welcome to tutorialspoint
Occurrences :6

この実行例では、入力文字列の中に「t」が4回、「m」が1回、「p」が1回出現しているため、合計6件のマッチが検出されています。

例2:否定文字クラスでマッチさせる

次は、[^abcdef] という否定文字クラスを使用した例です。a〜f 以外のすべての文字がマッチ対象となり、その出現回数をカウントします。

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("Enter a String");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        String regex = "[^abcdef]";
        //正規表現をコンパイル
        Pattern pattern = Pattern.compile(regex);
        //Matcherオブジェクトを取得
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while(matcher.find()) {
            count++;
        }
        System.out.println("Occurrences :"+count);
    }
}

出力結果

Enter a String
Hello how are you welcome to tutorialspoint
Occurrences :36

このように、文字クラスを使いこなすことで「含まれていてほしい文字」だけでなく「含まれていてほしくない文字」の条件も柔軟に表現でき、文字列の検証や集計処理を簡潔に実装できます。

  1. Java正規表現(RegEx)で任意の文字にマッチさせる方法

    Javaの正規表現におけるメタ文字「.」(ドット)は、任意の1文字にマッチします。マッチ対象はアルファベットでも数字でも、記号などの特殊文字でも構いません。メタ文字「.」の基本「.」は改行文字以外のあらゆる単一文字と一致するため、パターンの柔軟性を高めたい場面で非常に便利です。なお、ドットそのもの(リテラルの「.」)にマッチさせたい場合は、バックスラッシュでエスケープして「\.」と記述します。例1:任意の1文字とのマッチ次のプログラムでは、ユーザーから入力された文字列に対して正規表現「.」を適用し、文字数をカウントしています。import java.util.Scanner; import j

  2. Javaの正規表現を使って文字列からHTMLタグを抽出する方法

    Javaのjava.util.regexパッケージには、文字シーケンスの中から特定のパターンを検索するためのさまざまなクラスが用意されています。 このパッケージのPatternクラスは、正規表現をコンパイルした結果を表すクラスです。文字列と正規表現のマッチングを行うために、次の2つのメソッドが提供されています。 compile() − 正規表現を表す文字列を引数として受け取り、Patternクラスのオブジェクトを返します。 matcher() − 対象となる文字列を受け取り、その文字列を現在のPatternオブジェクトが表すパターンと照合するためのMatcherオブジェクトを生成します。