MENU

Menu

CLOSE

【Java正規表現】組み合わせや使い方のまとめ

最終更新日 : 2022.09.21

プログラミングにおいて、日付やメールアドレスなど、同じような文字列に対して同様の処理を実行したい場合が良くあります。
そんな時、コンピュータ側に検索したい文字列のパターンを教えなければなりません。
その際使うのが、「正規表現」という記述方法です。
この記事では、Javaの正規表現の使い方について解説していきます。

Java正規表現の基本

正規表現とは、文字列のパターンをコンピュータが分かる形式で記述した表現のことです。
正規表現自体は多くのプログラミング言語で利用されていますが、今回はJavaの正規表現について解説していきます。

Java正規表現とは

正規表現とは、「文字列のパターンをコンピュータが分かる形式で記述した表現」のことです。
例えば、多くの文字列の中から「郵便番号」だけを検索したい場合、次のような正規表現を使います。

[0-9]{3}-[0-9]{4}

こちらは、「「0-9の数字三桁」-(ハイフン)「0-9の数字4桁」」というパターンを表現する正規表現となっています。
正規表現を使って、文字列のパターンを規則的に表現することで、コンピュータが検索等の処理を行えるようになります。

PatternクラスとMatcherクラス

Javaで正規表現を利用したい時は、「Patternクラス」「Matcherクラス」を使います。
「Patternクラス」は正規表現の「パターン」を、「Matcherクラス」は正規表現と検索したい文字列との「マッチング」を行います。

Java正規表現は、基本的にはこのPatternとMatcherを利用しますが、それ以外にもmatchesメソッドも利用できます。
両者の詳しい使い方は後ほど解説します。

Java正規表現でできること

Java正規表現を利用すれば、検索以外にも様々な処理が実装できます。

例えば、「Yellow, Red, Black」といった文字列を「,」で区切って

Yellow
Red
Black

と出力したり、正規表現にマッチした文字列を置換・除去したりと、様々な使い方が可能です。
正規表現を使いこなすことで、文字列を扱える幅が大きく広がります。
使い方をマスターして、スキルアップを目指しましょう。

Javaの基本については、こちらの記事もご覧ください。

【Java入門編】特徴とできること、習得のメリットを解説!

Java正規表現の組み合わせ

Javaでは、複数の正規表現を組み合わせて利用することもできます。
「パターンAにマッチする」かつ「パターンBにマッチする」
「パターンAにマッチする」あるいは「パターンBにマッチする」
といった具合に、複数の正規表現を組み合わせてより柔軟な検索が可能となります。

すべての条件に一致する場合

まず、すべての条件に一致する場合の記述方法をご紹介します。
全ての条件に一致する組み合わせ(and)は、

条件1*条件2

と表現します。「*」で複数の条件をつなぎます。
例えば、「0から始まる」という条件と「9で終わる」という条件の両方に一致するパターンを検索する際は、次のような正規表現を用います。

^1*9$

どれかひとつの条件に一致する場合

複数の条件の内どれか一つに一致する場合の記述方法をご紹介します。
どれか一つに一致する組み合わせ(or)は、

条件1|条件2

と表現します。「|」で複数の条件をつなぎます。
例えば、「0から始まる」という条件と「9で終わる」という条件の一方に一致するパターンを検索する際は、次のような正規表現を用います。

^1|9$

Java正規表現の使い方

それでは、Java正規表現の具体的な使い方を解説していきます。
正規表現を使った検索の方法は主に2つあります。
1つは「Pattern」クラスを作る方法、もう1つは「matches」メソッドを使う方法です。

Patternを作る

まずは、Patternクラスを作り、Matchesクラスで照合する方法について解説します。
以下、コード例です。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
  public static void main(String[] args) {

    String str = "100-0000 東京都千代田区";

    Pattern p = Pattern.compile("[0-9]{3}-[0-9]{4}");
    Matcher m = p.matcher(str);

    System.out.println(m.find());
  }
}

このコードでは、検索したい文字列として「100-0000 東京都千代田区」を指定しています。

Pattern p = Pattern.compile("[0-9]{3}-[0-9]{4}");

で、正規表現のパターンを指定します。

Matcher m = p.matcher(str);

で、「Pattern」で指定された正規表現と文字列(str)とのマッチングを行います。
今回の場合、文字列の中に「100-0000」が含まれているため、実行結果としては「true」が返されます。

このように、「Patternクラス」と「Matcherクラス」を利用して正規表現での検索が可能です。

matchesメソッドを使う

単純に検索を行いたい場合は、わざわざ「Patternクラス」と「Matcherクラス」を使わずとも、「matches」メソッドで簡単に実行できます。
以下、コード例です。

public class Main {

  public static void main(String[] args) throws Exception {

    String str = "redblackbluewhite";

    if(str.matches(".*blue.*"))
    {
      System.out.println("blue matched");
    }
  }
}

このコードでは、文字列「redblackbluewhite」を検索対象とし、文字列内に「blue」が含まれるパターンを正規表現で記述しています。
matchesメソッドを使うことで、「Pattern」「Matcher」クラスを使わずとも正規表現を使って検索ができます。

Java正規表現の活用例

Java正規表現の活用例をご紹介します。
Java正規表現は、様々な処理に利用できますが、ここでは2つの活用例について解説します。

英数字や日付をチェックする

ある文字列が英数字かどうかをチェックするには、次のような正規表現を使います。

^[0-9a-zA-Z]+$

「0-9の数字、a-zの英小文字、A-Zの英大文字」が含まれているパターンを表現しています。

また、「2022/01/01」といった日付をチェックする際には、次のような正規表現を使います。

^[0-9]{4}/[0-9]{2}/[0-9]{2}$

「o-9の数字4桁/数字2桁/数字2桁」で構成されているパターンを表現しています。

文字列の操作を行う

正規表現を使って、文字列の操作を行うこともできます。
ここでは、文字列の置き換えと除去の方法を解説します。

文字列の置き換えは、次のように「Matcher」クラスの「replaceAll」メソッドを使います。

Pattern pattern = Pattern.compile("[a-z]+");

Matcher matcher1 = pattern.matcher("abc def");
String replaced1 = matcher1.replaceAll("123");
System.out.println(replaced1);

このコードでは、「英文字」に一致する文字列を全て「123」に置き換えるコードです。
コードを実行すると、「123 123」が出力されます。

文字列を除去する際には、次のようなコードを使います。

String s = "a b c d";
Pattern p = Pattern.compile(" ");
Matcher m = p.matcher(s);
String r = m.replaceAll("");
System.out.println(r);

文字列「a b c d」の間に含まれる「” “」(半角スペース)を、「””」に置換することで、半角スペースを除去することができます。
コードを実行すると「abcd」が出力されます。

【まとめ】Java正規表現を理解して活用しよう!

この記事では、Java正規表現の使い方を解説してきました。
Java正規表現は、基本的には「Patternクラス」と「Matcherクラス」を使って表現します。
正規表現を使えば、検索だけでなく置換や除去など、様々な処理を実装できます。

Java正規表現を使いこなして、プログラミングスキル向上を目指しましょう。

Javaについては、こちらの記事も合わせてご覧ください

Javaの配列とは?基本から応用まで使い方をわかりやすく解説
【Java入門編】特徴とできること、習得のメリットを解説!

カテゴリ Category