Javaの正規表現で数字以外の文字にマッチさせる方法(\Dメタ文字の使い方)
Javaの正規表現では、メタ文字「\D」を使うことで、数字以外の文字(0〜9以外)にマッチさせることができます。
「\d」が任意の1桁の数字([0-9])を表すのに対し、「\D」はその逆で、数字以外のあらゆる1文字([^0-9])に対応します。空白・記号・英字などもすべて「数字以外」として扱われる点に注意しましょう。
例1:数字以外の文字数をカウントする
次のサンプルでは、ユーザーが入力した文字列の中に、数字以外の文字がいくつ含まれているかを「\D」で数えています。
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("文字列を入力してください");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String regex = "\\D";
// 正規表現をコンパイル
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトを取得
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println("数字以外の文字数: " + count);
}
}実行結果
文字列を入力してください sample text 2425 36 数字以外の文字数: 13
入力された「sample text 2425 36」には、スペースも含めて13個の数字以外の文字があるため、結果は「13」と表示されます。
例2:入力値のバリデーションに活用する
量指定子と組み合わせると、入力チェックにも利用できます。次の例では「\D{10}」という正規表現を使い、10文字すべてが数字以外であるかどうかを判定しています。
import java.util.Scanner;
public class RegexExample {
public static void main( String args[] ) {
// 数字以外の文字が10個連続することを表す正規表現
String regex = "\\D{10}";
System.out.println("入力値を入力してください:");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
boolean result = input.matches(regex);
if(result) {
System.out.println("マッチしました");
}
else {
System.out.println("不正な入力です");
}
}
}実行結果1(マッチする場合)
入力値を入力してください: sample abc マッチしました
実行結果2(マッチしない場合)
入力値を入力してください: sample1234 不正な入力です
2つ目の実行例では、入力に数字「1234」が含まれているため条件を満たさず、「不正な入力です」と表示されます。
まとめ
- 「\D」は数字以外の1文字にマッチするメタ文字である
- Javaのソースコード内では、エスケープシーケンスとして「\\D」と記述する
- 「{n}」などの量指定子と組み合わせることで、文字数を含む入力バリデーションにも応用できる
-
Javaの正規表現における「[^...]」(否定文字クラス)の使い方
Javaの正規表現における部分式(メタ文字)「[^...]」は、括弧内に含まれていない任意の1文字にマッチする否定文字クラスです。通常の文字クラス「[...]」が括弧内のいずれかの文字にマッチするのに対し、先頭に「^」を付けることで意味が反転し、指定した文字以外にマッチします。例1:特定の文字以外の出現回数をカウントする次の例では、「h」「w」「t」「y」「o」「u」「p」「i」以外の文字が入力文字列にいくつ含まれているかを数えています。import java.util.regex.Matcher; import java.util.regex.Pattern; public class S
-
Pythonの正規表現で数字以外の文字のみをマッチ・抽出する方法
Pythonの正規表現(reモジュール)を使うと、文字列から数字以外の文字だけを簡単に抽出できます。パターン \D は「数字以外の1文字」にマッチし、\D+ と書くことで「数字以外の文字が1回以上連続している部分」にマッチします。例:re.search()で最初のマッチを取得する次のコードは、指定された文字列から数字以外の部分を正規表現でマッチさせます。import re m = re.search(r\D+, 5Need47for Speed 2) print(m)出力<re.Match object; span=(1, 5), match=Need>re.search() は