1. 導入:なぜPattern.matchesが重要なのか
Javaでプログラミングをしていると、「入力された文字列がメールアドレスの形式になっているか」「数字だけで構成されているか」といった判定が必要になる場面が非常に多くあります。これらを細かくif文で書こうとすると非常に複雑になりますが、正規表現(Regular Expression)を使えばわずか1行で解決できます。その中でも、最も手軽に使えるのがPattern.matchesメソッドです。
2. 基礎知識:正規表現とPatternクラスとは
正規表現とは、文字列のパターンを記述するための「ルール」のことです。Javaでは、java.util.regexパッケージに含まれるPatternクラスを使ってこのルールを扱います。
Pattern.matchesは、「指定した正規表現(ルール)」に「対象の文字列」が完全に合致するかどうかをboolean型(true/false)で返してくれる便利なメソッドです。
3. 実装・解決策:どう使い分けるべきか
Pattern.matchesは「一度だけ判定したい」という用途には最適です。しかし、何度も繰り返し判定を行う場合は、毎回パターンをコンパイルするコストがかかるため、あらかじめPatternオブジェクトを生成しておく手法をとります。まずは、基本的な使い方から見ていきましょう。
4. サンプルプログラム:実際に動かしてみよう
以下のコードは、電話番号の形式(ハイフンあり)をチェックする簡単な例です。
import java.util.regex.Pattern;
public class RegexSample {
public static void main(String[] args) {
// チェックしたい文字列
String phoneNumber = "090-1234-5678";
// 正規表現:3桁-4桁-4桁の数字であることをチェック
// \dは数字を意味し、{n}は回数を指定します
String regex = "\\d{3}-\\d{4}-\\d{4}";
// Pattern.matchesで一括判定
boolean isMatch = Pattern.matches(regex, phoneNumber);
if (isMatch) {
System.out.println("正しい電話番号の形式です。");
} else {
System.out.println("形式が異なります。");
}
}
}
5. 応用・注意点:現場での賢い使い方
現場で活用する際に、ぜひ覚えておいてほしいポイントが3つあります。
・エスケープに注意する
Javaの文字列の中でバックスラッシュ(\)を扱う場合、もう一つバックスラッシュを足して「\\」と記述する必要があります。正規表現自体のエスケープと混同しがちなので注意してください。
・名前付きグループ(Named Groups)の活用
Java 7以降では、正規表現内でグループに名前を付けられます。例えば (?<area>\d{3}) のように記述すると、マッチング後に「area」という名前で後から値を取り出すことができ、コードの可読性が劇的に向上します。
・パフォーマンスの考慮
もし同じパターンで何万回も判定を行うような処理(ループ内など)がある場合は、Pattern.matchesを繰り返し呼び出すのは避けましょう。事前に Pattern p = Pattern.compile(regex); を行い、p.matcher(input).matches(); を使用することで、処理速度を大幅に改善できます。
まずは簡単なパターンから試し、徐々に複雑な正規表現に挑戦してみてください。これだけで、文字列操作のスキルが一段階レベルアップしますよ。

コメント