Javaの正規表現「\S」メタ文字の使い方を徹底解説
Javaの正規表現におけるサブ式(メタ文字)「\S」は、空白以外の文字にマッチします。つまり、スペース・タブ・改行などの空白文字を除いた、すべての文字と一致します。
このメタ文字を使うことで、「文字列から空白を除外した文字数をカウントする」「空白を含まないトークンを抽出する」といった処理を簡単に実装できます。
例1:\Sにマッチする文字数をカウントする
次のサンプルコードでは、入力文字列の中で「\S」にマッチした回数(=空白以外の文字数)をカウントしています。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String args[]) {
String regex = "\\S";
String input = "Hello how are you welcome to Tutorialspoint !";
// Patternオブジェクトを作成
Pattern p = Pattern.compile(regex);
// Matcherオブジェクトを作成
Matcher m = p.matcher(input);
int count = 0;
while (m.find()) {
count++;
}
System.out.println("マッチ数: " + count);
}
}実行結果
マッチ数: 38
入力文字列には空白が含まれていますが、それらは無視され、空白以外の38文字すべてがマッチ対象としてカウントされます。
例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 = "\\S";
Scanner sc = new Scanner(System.in);
System.out.println("5つの入力文字列を入力してください:");
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("各文字列の空白を除いた文字数:");
for (int i = 0; i < 5; i++) {
// Matcherオブジェクトを作成
Matcher m = p.matcher(input[i]);
int count = 0;
while (m.find()) {
count++;
}
System.out.println("文字列 " + i + ": " + count);
}
}
}実行結果
5つの入力文字列を入力してください: sample123 test data test *123 ab bc cd de hello how are you welcome to Tutorialspoint 各文字列の空白を除いた文字数: 文字列 0: 9 文字列 1: 8 文字列 2: 8 文字列 3: 8 文字列 4: 37
ポイントまとめ
- 「
\S」は空白以外の1文字にマッチするメタ文字です。 - Javaのコード内では、バックスラッシュをエスケープするため「
\\S」と記述します。 - 対になる「
\s」(空白文字にマッチ)と組み合わせることで、柔軟な文字列処理が可能になります。 Patternクラスで正規表現をコンパイルし、Matcherクラスのfind()メソッドで順次マッチを確認するのが基本的な流れです。
-
Javaの正規表現における$(ドル)メタ文字の使い方
正規表現におけるサブ表現(メタ文字)「$」は、行の末尾に一致します。パターンの最後に「$」を置くことで、指定した文字列で終わるテキストだけをマッチさせることができます。なお、デフォルトでは「$」は入力全体の末尾に一致しますが、Pattern.MULTILINEフラグを有効にすると、行区切り文字(改行など)の直前にも一致するようになります。例1:行末の一致を確認する次のJavaプログラムでは、「Tutorialspoint」という文字列で終わる入力に対して、正規表現「Tutorialspoint$」が何回一致するかを数えています。import java.util.regex.Matcher; i
-
Java正規表現のメタ文字「^(キャレット)」の使い方を解説
正規表現におけるサブ式(メタ文字)「^」は、行の先頭にマッチします。この記号を正規表現の中で使用すると、入力文字列の中でその後に続くパターンが行頭から始まる場合に一致とみなされます。 例1:行頭のパターンにマッチするか確認する 次のサンプルコードでは、入力文字列が「Hi how are you」というフレーズで始まっているかどうかを「^」を使って判定しています。 import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExample { public static void m