1. 導入:なぜ正規表現にコメントが必要なのか?
Javaで正規表現を扱う際、複雑な文字列パターン(メールアドレスや電話番号のバリデーションなど)を書くと、あっという間に「記号の羅列」になり、後から見た時に何をしているのか全く分からなくなることはありませんか?
そんな課題を解決してくれるのが「Pattern.COMMENTS」フラグです。これを使うと、正規表現の中に空白やコメント(#以降)を記述でき、可読性が劇的に向上します。
2. 基礎知識:Pattern.COMMENTSとは?
Javaの正規表現エンジンであるjava.util.regex.Patternクラスには、動作を調整するためのフラグがいくつか用意されています。
COMMENTSフラグを有効にすると、以下の2つのルールが適用されます。
・パターン内の「空白文字(スペースやタブなど)」は無視される。
・「#」から行末まではコメントとして扱われ、無視される。
これにより、巨大な正規表現を複数行に分割し、詳細な注釈を入れながら記述できるようになります。
3. 実装:どうやって使うのか?
通常、Pattern.compileメソッドで正規表現をコンパイルする際に、第2引数としてフラグを渡します。
Pattern pattern = Pattern.compile(“パターン”, Pattern.COMMENTS);
これだけで、正規表現エンジンは空白や#以降の文字を無視して解析してくれます。
4. サンプルプログラム
以下は、郵便番号(例: 123-4567)をチェックする正規表現を、COMMENTSフラグを使って読みやすく記述した例です。
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexCommentExample {
public static void main(String[] args) {
// COMMENTSフラグを使用して正規表現を定義
// 空白や改行、#以降のコメントが無視されるため、構造を理解しやすくなる
String regex = “””
^ # 文字列の開始
\\d{3} # 郵便番号の最初の3桁
- # ハイフン
\\d{4} # 郵便番号の後半4桁
$ # 文字列の終了
“””;
Pattern pattern = Pattern.compile(regex, Pattern.COMMENTS);
String input = “123-4567”;
Matcher matcher = pattern.matcher(input);
if (matcher.matches()) {
System.out.println(“郵便番号の形式として正しいです。”);
} else {
System.out.println(“形式が正しくありません。”);
}
}
}
5. 応用・注意点
注意点:空白をマッチさせたい場合
COMMENTSフラグを有効にすると、正規表現内で「スペース文字」をマッチさせたい場合、そのままスペースを入れても無視されてしまいます。その場合は「\s」や「\x20(スペースの文字コード)」を使うようにしてください。
現場での活用法
実務では、一つのクラスに巨大な定数として正規表現を置くことが多いですが、このフラグを使えばドキュメントを別途用意しなくても「コードそのものが仕様書」になります。メンテナンス性を高めるため、複雑なパターンには積極的にこのフラグを適用することをおすすめします。

コメント