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

JavaのPattern.quote()メソッドとは?使い方をサンプルコード付きで解説

Javaのjava.util.regexパッケージには、文字シーケンスの中から特定のパターンを検索するためのさまざまなクラスが用意されています。

このパッケージに含まれるPatternクラスは、正規表現をコンパイルした結果を表すクラスです。このクラスが提供するquote()メソッドは、文字列を引数として受け取り、その文字列と完全に一致するパターン文字列を返します。具体的には、指定された文字列の前後に\Q\Eというエスケープシーケンスが追加され、正規表現のメタ文字がすべて無効化されます。ただし、元の文字列そのものの意味が変わることはありません。

Pattern.quote()メソッドの基本動作

quote()メソッドは、ユーザー入力などの任意の文字列を「正規表現ではなく普通の文字列(リテラル)」として扱いたい場合に非常に便利です。たとえば、検索対象の文字列に *[. といった正規表現で特別な意味を持つ記号が含まれていても、quote()メソッドを使えばそのままの形でマッチングできます。

使用例1:入力された文字列を検索する

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class QuoteExample {
    public static void main( String args[] ) {
        // 文字列を読み込む
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter input string");
        String input = sc.nextLine();
        System.out.print("Enter the string to be searched: ");
        String regex = Pattern.quote(sc.nextLine());
        System.out.println("pattern string: "+regex);
        // 正規表現をコンパイルする
        Pattern pattern = Pattern.compile(regex);
        // Matcherオブジェクトを取得する
        Matcher matcher = pattern.matcher(input);
        if(matcher.find()) {
            System.out.println("Match found");
        } else {
            System.out.println("Match not found");
        }
    }
}

実行結果

Enter input string
This is an example program demonstrating the quote() method
Enter the string to be searched: the
pattern string: \Qthe\E
Match found

この例では、検索文字列「the」がquote()メソッドによって \Qthe\E というパターン文字列に変換され、入力文字列の中から正常にマッチングできていることがわかります。

使用例2:正規表現の特殊文字をリテラルとして扱う

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class QuoteExample {
    public static void main( String args[] ) {
        String regex = "[aeiou]";
        String input = "Hello how are you welcome to Tutorialspoint";
        // 正規表現をコンパイルする
        Pattern.compile(regex);
        regex = Pattern.quote(regex);
        System.out.println("pattern string: "+regex);
        // 正規表現をコンパイルする
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(input);
        if(matcher.find()) {
            System.out.println("The input string contains vowels");
        } else {
            System.out.println("The input string does not contain vowels");
        }
    }
}

実行結果

pattern string: \Q[aeiou]\E
The input string contains vowels

この例では、本来なら「母音のいずれか1文字」を意味する文字クラス [aeiou] が、quote()メソッドによって \Q[aeiou]\E というリテラル文字列に変換されます。その結果、「[aeiou]」という文字列そのものが入力内に存在するかどうかの判定に変わります。

まとめ

  • quote()は、引数に渡した文字列を \Q\E で囲んだパターン文字列を返す静的メソッドです。
  • メタ文字やエスケープシーケンスが自動的に無効化されるため、ユーザー入力などを安全にリテラル検索できます。
  • 正規表現の特殊文字を含む文字列をそのまま検索したい場合に特に有効です。
  1. JavaのPattern.matcher()メソッドの使い方を実例で解説

    Javaのjava.util.regexパッケージには、文字シーケンスの中から特定のパターンを検索するためのさまざまなクラスが用意されています。 このパッケージに含まれるPatternクラスは、正規表現をコンパイルした結果を表すクラスです。このクラスが提供するmatcher()メソッドは、入力文字列を表すCharSequenceオブジェクトを引数として受け取り、現在のPatternオブジェクトが表す正規表現と入力文字列を照合するためのMatcherオブジェクトを返します。 matcher()メソッドの基本的な流れ matcher()メソッドを使った正規表現マッチングは、一般的に以下の手順で行い

  2. 【Java】Pattern.compile()メソッドの使い方を具体例でわかりやすく解説

    java.util.regex パッケージに含まれる Pattern クラスは、正規表現をコンパイルした結果を表すクラスです。このクラスが持つ compile() メソッドは、正規表現を表す文字列を受け取り、その正規表現をコンパイルした Pattern オブジェクトを返します。 基本的な構文 compile() メソッドの最もシンプルな形式は、引数として正規表現の文字列を1つ受け取ります。 Pattern pattern = Pattern.compile(regex); コンパイル済みの Pattern オブジェクトから matcher() メソッドを呼び出すことで Matcher オブジェ