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

Javaの正規表現(RegEx)で非単語文字をマッチさせる方法をわかりやすく解説

Javaの正規表現では、英字(大文字・小文字の両方)および数字(0〜9)以外のすべての文字が「非単語文字(non-word character)」として扱われます。記号や空白などがこれに該当します。こうした文字をマッチさせたい場合は、メタ文字 \W を使用します。

なお、\W は文字クラス [^a-zA-Z0-9_] と同等の意味を持ちます。注意点として、アンダースコア(_)は単語文字に含まれるため、\W にはマッチしません。

例1:PatternクラスとMatcherクラスを使った方法

先頭から5文字がすべて非単語文字であるかどうかを判定する例です。正規表現 ^\W{5} を使って、入力文字列の冒頭5文字が記号などで構成されているかをチェックします。

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 = "^\\W{5}";
        // 正規表現をコンパイルする
        Pattern pattern = Pattern.compile(regex);
        // Matcherオブジェクトを取得する
        Matcher matcher = pattern.matcher(input);
        if(matcher.find()) {
            System.out.println("Match occurred");
        } else {
            System.out.println("Match not occurred");
        }
    }
}

実行結果1

Enter a String
*&&^#
Match occurred

入力された *&&^# はすべて記号(非単語文字)のため、パターンにマッチします。

実行結果2

Enter a String
hello
Match not occurred

一方、hello はすべて英字(単語文字)で構成されているため、マッチしません。

例2:String.matches()メソッドを使った方法

Pattern クラスと Matcher クラスを明示的に使わず、String クラスの matches() メソッドを使えば、より簡潔に記述できます。このメソッドは文字列全体が正規表現に一致するかどうかを判定します。

import java.util.Scanner;
public class RegexExample {
    public static void main( String args[] ) {
        String regex = "\\W*";
        System.out.println("Enter input value: ");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        boolean bool = input.matches(regex);
        if(bool) {
            System.out.println("match occurred");
        } else {
            System.out.println("match not occurred");
        }
    }
}

実行結果

Enter input value:
#***
match occurred

入力値 #*** はすべて非単語文字のため、正規表現 \W* に一致し、「match occurred」が出力されます。

まとめ

  • \W は英字と数字以外の文字(記号・空白など)にマッチするメタ文字です。
  • アンダースコア(_)は単語文字として扱われるため、\W の対象外です。
  • 部分一致を調べる場合は Matcher.find()、文字列全体との一致を調べる場合は String.matches() を使い分けると便利です。
  1. Java正規表現(RegEx)で任意の文字にマッチさせる方法

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

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

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