【Java】正規表現について
こんにちは。技術部のNです。 今回は、Javaの正規表現について書いていこうと思います。
Java 正規表現処理の基本
Javaで正規表現処理を行うには、PatternクラスとMatcherクラスをします。
Patternクラスは、正規表現パターンをコンパイルして、Matcherクラスに渡します。Matcherクラスは正規表現パターンに一致する文字列の位置や長さなどの情報を提供します。
正規表現パターン
メタ文字 | 意味 | 例 |
---|---|---|
. | 任意の文字 | .* は、任意の文字が0文字以上繰り返されるパターンにマッチします。 |
[a-zA-Z] | アルファベット | [a-zA-Z]+ は、アルファベットが1文字以上繰り返されるパターンにマッチします。 |
[0-9] | 数字 | [0-9]+ は、数字が1文字以上繰り返されるパターンにマッチします。 |
\w | 文字 | アルファベット、数字、記号のいずれか |
\s | 空白 | 空白文字(スペース、タブ、改行など) |
\d | 数字 | |
\D | 数字以外 | |
\w | 文字 | |
\W | 文字以外 | |
^ | 文字列の先頭 | ^ABC は、文字列の先頭が ABC であるパターンにマッチします。 |
\ \ | 文字列の末尾 \ | ABC は、文字列の末尾が ABC であるパターンにマッチします。 |
* | 前方の文字を0回以上繰り返す | a* は、a が0回以上繰り返されるパターンにマッチします。 |
+ | 前方の文字を1回以上繰り返す | a+ は、a が1回以上繰り返されるパターンにマッチします。 |
? | 前方の文字を0回または1回繰り返す | a? は、a が0回または1回繰り返されるパターンにマッチします。 |
応用的な正規表現パターン
メタ文字 | 意味 | 例 |
---|---|---|
{n} | 前方の文字をn回繰り返す | a{3} は、a が3回繰り返されるパターンにマッチします。 |
{n,m} | 前方の文字をn回以上m回以下繰り返す | a{3,5} は、a が3回以上5回以下繰り返されるパターンにマッチします。 |
\b | 単語の境界 | \babc は、文字列の境界(単語の境界)で abc が現れるパターンにマッチします。 |
\B | 単語の境界以外 | \Babc は、文字列の境界以外で abc が現れるパターンにマッチします。 |
(? |
グループ化 | グループ化されたパターンを、名前で参照することができます。 |
(?=pattern) | 先行条件 | パターンが先行する文字列にマッチします。 |
(?!pattern) | 否定先行条件 | パターンが先行しない文字列にマッチします。 |
Matcher クラスの基本的な使い方
Matcher クラスの基本的な使い方は、次のとおりです。
- Pattern クラスで正規表現パターンをコンパイルする。
- Matcher クラスの matcher メソッドで、コンパイルしたパターンと検索対象の文字列を渡す。
- Matcher クラスの find メソッドで、マッチする文字列の位置を取得する。
- Matcher クラスの group メソッドで、マッチした文字列を取得する。
以下は文字列に含まれる数値を検索する例です。
java
String str = "私の名前は山田太郎です。郵便番号は123-4567です。";
この文字列から、名前と郵便番号を抽出したいとします。
その場合、以下のような正規表現パターンを使うことができます。
java
//名前は任意の文字列
String namePattern = "名前は(.+?)です。";
//郵便番号は数字3桁-数字4桁
String zipPattern = "[0-9]{3}-[0-9]{4}";
次に、以下のようにPatternオブジェクトとMatcherオブジェクトを生成します。
java
//名前のパターンをコンパイル
Pattern namePatternObj = Pattern.compile(namePattern);
//郵便番号のパターンをコンパイル
Pattern zipPatternObj = Pattern.compile(zipPattern);
//名前のパターンを文字列に適用
Matcher nameMatcher = namePatternObj.matcher(str);
//郵便番号のパターンを文字列に適用
Matcher zipMatcher = zipPatternObj.matcher(str);
最後に、以下のようにMatcherのメソッドを使って、名前と郵便番号を取得します。
java
//名前が見つかったら
if (nameMatcher.find()) {
//名前を取得
String name = nameMatcher.group(1);
//名前を出力
System.out.println("名前: " + name);
}
//郵便番号が見つかったら
if (zipMatcher.find()) {
//郵便番号を取得
String zip = zipMatcher.group();
//郵便番号を出力
System.out.println("郵便番号: " + zip);
このコードを実行すると、以下のような結果が得られます。
名前: 山田太郎
郵便番号: 123-4567
初歩的な内容ではありますが、正規表現の理解を深めるために、再認識も兼ねて書かせていただきました。
正規表現を学習して、テキスト処理やプログラミングを効率化しましょう!
最後までお読みいただきありがとうございました。
関連記事
- 2023-12-25
- テクノロジー