Javaの正規表現で単語文字をマッチさせる方法(\wの使い方を解説)
正規表現における「単語文字」とは、英字(大文字・小文字)、数字(0〜9)、そしてアンダースコア(_)の総称です。これらの文字にマッチさせるには、メタ文字「\w」を使用します。Javaでは「\w」は「[a-zA-Z_0-9]」と同等の意味を持ちます。
例1:先頭5文字が単語文字かどうかを判定する
次の例では、正規表現「^\w{5}」を使って、入力された文字列の先頭5文字がすべて単語文字であるかをチェックしています。「^」は文字列の先頭位置を表し、「{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 = 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 hello Match occurred
入力が「hello」の場合、先頭5文字がすべて英小文字であるため、マッチが発生します。
実行結果2
Enter a String #how Match not occurred
一方、「#how」のように記号「#」が含まれていると、単語文字以外の文字が先頭に存在するためマッチしません。
例2:文字列全体が単語文字のみで構成されているか判定する
次の例では、正規表現「\w*」を使用しています。Stringクラスのmatches()メソッドは文字列全体との完全一致を判定するため、入力値が単語文字だけから構成されている場合にのみtrueを返します。
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 not occurred
入力が「*##&」の場合、記号が含まれているためマッチせず、「match not occurred」が出力されます。
補足:\wと\Wの違い
「\w」が単語文字にマッチするのに対し、その否定形である「\W」は単語文字以外の文字(記号や空白など)にマッチします。用途に応じて使い分けると便利です。
なお、Javaのデフォルト設定では「\w」はASCII文字のみを対象とするため、日本語などの全角Unicode文字にはマッチしません。Unicode文字も単語文字として扱いたい場合は、Pattern.compile()の第2引数に「Pattern.UNICODE_CHARACTER_CLASS」フラグを指定するか、「\p{L}」のようなUnicodeプロパティを利用したパターンを検討してください。
-
Java正規表現(Regex)で固定文字セットにマッチさせる方法
Javaの正規表現における文字クラスを使うと、あらかじめ定義しておいた固定の文字集合の中から「任意の1文字」にマッチさせることができます。たとえば、次のように記述します。 [tmp]:t、m、p のいずれか1文字にマッチします。 [^tp]:t と p 以外の任意の1文字にマッチします(先頭に ^ を付けると否定を意味します)。 角括弧 [ ] 内に候補となる文字を列挙すると、入力文字列の各位置についてその中のどれか1つが存在すればマッチが成立します。この仕組みを利用すると、「特定の文字が文字列内に何回出現するか」を簡単に数えることができます。 例1:指定した文字の出現回数をカウントする
-
Java正規表現(RegEx)で任意の文字にマッチさせる方法
Javaの正規表現におけるメタ文字「.」(ドット)は、任意の1文字にマッチします。マッチ対象はアルファベットでも数字でも、記号などの特殊文字でも構いません。メタ文字「.」の基本「.」は改行文字以外のあらゆる単一文字と一致するため、パターンの柔軟性を高めたい場面で非常に便利です。なお、ドットそのもの(リテラルの「.」)にマッチさせたい場合は、バックスラッシュでエスケープして「\.」と記述します。例1:任意の1文字とのマッチ次のプログラムでは、ユーザーから入力された文字列に対して正規表現「.」を適用し、文字数をカウントしています。import java.util.Scanner; import j