目次
プログラミングにおいて、日付やメールアドレスなど、同じような文字列に対して同様の処理を実行したい場合が良くあります。
そんな時、コンピュータ側に検索したい文字列のパターンを教えなければなりません。
その際使うのが、「正規表現」という記述方法です。
この記事では、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では、複数の正規表現を組み合わせて利用することもできます。
「パターン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シルバー取得をし開発エンジニアとしての就職、キャリアアップを目指すコースです。
Javaプログラミング、オブジェクト指向、データベースなどを学習します。教材がすべて動画化、演習もeラーニングで完結するため受講生の都合に合わせたオーダーメイド型学習が可能です。
一人一人に必ず担任講師がつくので挫折の心配もなく、就職や転職のサポートもしっかりとしてくれるので心強いです。
またリスキリングを通じたキャリアアップ支援事業(経済産業省)の対象となるIT転職支援サービスのため、IT学習支援にかかる費用の最大70%の補助金を受け取ることができます。
無料カウンセリングもあるので、気になった方は一度受けてみてください。
【まとめ】Java正規表現を理解して活用しよう!
この記事では、Java正規表現の使い方を解説してきました。
Java正規表現は、基本的には「Patternクラス」と「Matcherクラス」を使って表現します。
正規表現を使えば、検索だけでなく置換や除去など、様々な処理を実装できます。
Java正規表現を使いこなして、プログラミングスキル向上を目指しましょう。
Javaについては、こちらの記事も合わせてご覧ください
Javaの配列とは?基本から応用まで使い方をわかりやすく解説
【Java入門編】特徴とできること、習得のメリットを解説!