Java正規表現で印刷不可能な文字(制御文字)をマッチングする方法
Javaの正規表現では、タブや改行といった印刷不可能な文字(非表示文字・制御文字)も簡単に照合できます。一般的によく使われる印刷不可能な文字は7種類あり、それぞれ固有のエスケープシーケンスと16進数表現を持っています。
主な印刷不可能な文字の一覧
| 名前 | 文字 | 16進数表現 |
|---|---|---|
| ベル(警告音) | \a | 0x07 |
| エスケープ | \e | 0x1B |
| フォームフィード | \f | 0x0C |
| ラインフィード(改行) | \n | 0x0A |
| キャリッジリターン(復帰) | \r | 0x0D |
| 水平タブ | \t | 0x09 |
| 垂直タブ | \v | 0x0B |
例1:エスケープシーケンスでタブをカウントする
次のJavaプログラムは、ユーザーから入力されたテキストを受け取り、その中に含まれるタブ(水平タブ)の数をカウントします。正規表現パターンとして \\t を使用しています。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
String regex = "\\t";
// Patternオブジェクトを作成
Pattern pattern = Pattern.compile(regex);
// コンパイルしたパターンを文字列に適用
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("入力テキスト内のタブの数: " + count);
}
}実行結果
Enter input text: sample text with tab spaces 入力テキスト内のタブの数: 3
Pattern.compile() で正規表現をコンパイルし、Matcher の find() メソッドをループさせることで、マッチした箇所をすべて数え上げています。
例2:16進数表現でマッチングする
エスケープシーケンスの代わりに、各文字の16進数表現を使ってマッチングすることもできます。タブの場合は \\x09 を指定します。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
String regex = "\\x09"; // タブの16進数表現
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("入力テキスト内のタブの数: " + count);
}
}実行結果
Enter input text: sample data with tab spaces 入力テキスト内のタブの数: 4
まとめ
このように、Javaの正規表現では \\t のようなエスケープシーケンス、または \\x09 のような16進数表現のどちらでも印刷不可能な文字を扱えます。ログ解析やデータクレンジングなど、目に見えない制御文字を処理したい場面で非常に役立つテクニックです。
-
Javaの正規表現でMM/DD/YYYY形式の日付を検証する方法
Java の java.util.regex パッケージには、文字シーケンスの中から特定のパターンを見つけ出すためのさまざまなクラスが用意されています。 このパッケージの中心となる Pattern クラスは、正規表現をコンパイルした結果を表すクラスです。文字列と正規表現のマッチングを行う際には、主に次の2つのメソッドを使用します。 compile() — 正規表現を表す文字列を受け取り、コンパイル済みの Pattern オブジェクトを返します。 matcher() — 検証対象の文字列を受け取り、現在の Pattern オブジェクトが表すパターンと照合するための Matcher オブジェクト
-
Javaの正規表現を使って文字列からHTMLタグを抽出する方法
Javaのjava.util.regexパッケージには、文字シーケンスの中から特定のパターンを検索するためのさまざまなクラスが用意されています。 このパッケージのPatternクラスは、正規表現をコンパイルした結果を表すクラスです。文字列と正規表現のマッチングを行うために、次の2つのメソッドが提供されています。 compile() − 正規表現を表す文字列を引数として受け取り、Patternクラスのオブジェクトを返します。 matcher() − 対象となる文字列を受け取り、その文字列を現在のPatternオブジェクトが表すパターンと照合するためのMatcherオブジェクトを生成します。