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

Javaで正規表現を使ってパターンマッチングを行う方法をわかりやすく解説

正規表現(Regular Expression)とは、入力テキストの中から特定のパターンを検索するための文字列のことです。正規表現には1つ以上の文字を含めることができ、これを利用することで文字列の検索や置換を効率的に行えます。

Javaでは、java.util.regex パッケージが正規表現によるパターンマッチング機能を提供しています。このパッケージの Pattern クラスは、コンパイル済みの正規表現を表すクラスです。文字列と正規表現を照合するために、このクラスは主に次の2つのメソッドを提供しています。

  • compile(): 正規表現を表す文字列を引数として受け取り、その正規表現をコンパイルした Pattern オブジェクトを返します。
  • matcher(): 対象となる文字列を引数として受け取り、現在の Pattern オブジェクトが表すパターンとその文字列を照合するための Matcher オブジェクトを生成します。

サンプルプログラム

次のJavaプログラムでは、ユーザーから文字列を入力として受け取り、その文字列にアルファベット(大文字・小文字の両方)が含まれているかどうかを判定します。数字も入力として受け付けます。

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("文字列を入力してください:");
        String input = sc.nextLine();
        
        // Patternオブジェクトの生成
        Pattern p = Pattern.compile(regex);
        // Matcherオブジェクトの生成
        Matcher m = p.matcher(input);  
        if(m.find()) {
            System.out.println("一致しました");
        }else {
            System.out.println("一致しませんでした");
        }
    }
}

実行結果 1

文字列を入力してください:
sample text
一致しました

実行結果 2

文字列を入力してください:
sample text 34 56
一致しました

プログラムのポイント

この例で使用している正規表現 [a-zA-Z][0-9]? は、「英字1文字の後に数字が0個または1個続く」パターンを意味します。Matcher クラスの find() メソッドは、入力文字列の中にパターンに一致する部分が存在するかどうかを順番に走査して確認します。なお、文字列全体が完全にパターンと一致するかを判定したい場合は、matches() メソッドを使用するとよいでしょう。

  1. Javaの正規表現における$(ドル)メタ文字の使い方

    正規表現におけるサブ表現(メタ文字)「$」は、行の末尾に一致します。パターンの最後に「$」を置くことで、指定した文字列で終わるテキストだけをマッチさせることができます。なお、デフォルトでは「$」は入力全体の末尾に一致しますが、Pattern.MULTILINEフラグを有効にすると、行区切り文字(改行など)の直前にも一致するようになります。例1:行末の一致を確認する次のJavaプログラムでは、「Tutorialspoint」という文字列で終わる入力に対して、正規表現「Tutorialspoint$」が何回一致するかを数えています。import java.util.regex.Matcher; i

  2. Pythonの正規表現で日付文字列をマッチングする方法をわかりやすく解説

    Pythonでは、標準ライブラリの re モジュールを使用することで、正規表現による文字列のパターンマッチングを簡単に行えます。ここでは、re.match() を使って、日付文字列が「日-月-年(d-m-y)」形式に一致するかどうかを判定する方法を紹介します。 サンプルコード import re # パターンに一致する場合 datestring = 21-09-1991 foo = re.match(r(\d{2})[/.-](\d{2})[/.-](\d{4})$, datestring) print(foo.group()) # パターンに一致しない場合 datestring = 19