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

Javaの正規表現「\W」メタ文字とは?非単語文字へのマッチ方法を解説

Javaの正規表現におけるサブ表現(メタ文字)「\W」は、単語文字以外の文字(非単語文字)に一致します。ここでいう単語文字とは、半角英字(a〜z・A〜Z)、数字(0〜9)、アンダースコア(_)のことであり、それ以外の空白や記号などはすべて非単語文字として扱われます。

「\W」は、単語文字に一致する「\w」と対になる否定形のメタ文字で、「[^\w]」と同等の意味を持ちます。文字列に記号や空白が含まれているかどうかを調べたい場合などに活用できます。

例1:非単語文字+「!」の組み合わせを検索する

次の例では、「\W!」というパターンを使用し、入力文字列内に「非単語文字の直後に感嘆符(!)が続く」箇所が何回出現するかをカウントします。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
    public static void main(String args[]) {
        String regex = "\\W!";
        String input = "Hello how are you welcome to Tutorialspoint !";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        int count = 0;
        while(m.find()) {
            count++;
        }
        System.out.println("Number of matches: "+count);
    }
}

実行結果

Number of matches: 1

入力文字列には「Tutorialspoint」の直後に「 !」(空白+感嘆符)という部分があり、この「空白(非単語文字)+!」の組み合わせが1回だけ出現するため、マッチ件数は1となります。

例2:非単語文字を含む文字列を抽出する

次の例では、キーボードから5つの文字列を入力として読み込み、そのうち非単語文字を含んでいる文字列のみを出力します。

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
    public static void main( String args[] ) {
        String regex = "\\W.*$";
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter 5 input strings: ");
        String input[] = new String[5];
        for (int i=0; i<5; i++) {
            input[i] = sc.nextLine();
        }
        //Patternオブジェクトの生成
        Pattern p = Pattern.compile(regex);
        System.out.println("Strings that contain non-word characters: ");
        for(int i=0; i<5;i++) {
            //Matcherオブジェクトの生成
            Matcher m = p.matcher(input[i]);
            if(m.matches()) {
                System.out.println(m.group());
            }
        }
    }
}

実行結果

Enter 5 input strings:
$hello
sample
test1
test2
#$&*
Strings that contain non-word characters:
$hello
#$&*

この実行結果では、「sample」「test1」「test2」は単語文字だけで構成されているためマッチせず、先頭が記号「$」で始まる「$hello」と、すべてが記号で構成される「#$&*」のみが出力されています。

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

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

  2. Java正規表現のメタ文字「^(キャレット)」の使い方を解説

    正規表現におけるサブ式(メタ文字)「^」は、行の先頭にマッチします。この記号を正規表現の中で使用すると、入力文字列の中でその後に続くパターンが行頭から始まる場合に一致とみなされます。 例1:行頭のパターンにマッチするか確認する 次のサンプルコードでは、入力文字列が「Hi how are you」というフレーズで始まっているかどうかを「^」を使って判定しています。 import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExample { public static void m