Javaエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnetJava
  2. Javaコラム
  3. Java TIPS
  4. Javaでの正規表現の使い方!文字列検索や置換のためのメソッドも紹介

Javaでの正規表現の使い方!文字列検索や置換のためのメソッドも紹介

  • Java TIPS
公開日時:   更新日時:
Javaでの正規表現の使い方!文字列検索や置換のためのメソッドも紹介
この記事でわかること

    システム
    エンジニア
    Javaでの正規表現を使うと効率化できそうですね。

    プロジェクト
    マネージャー
    1つの文字列で複数の文字列を検索できるので、使い方をマスターすれば便利に仕事ができるはずです。

    正規表現とは?

    正規表現とは、プログラミング言語やテキストエディタにて文字列の検索、置換を行う際に利用される表現方法のことです。1つの文字列で複数のパターンを検索したいときなどに利用されます。例えば、人物のリストから「””さ””、または””た””から始まる3文字の名字」を検索したい場合、以下のようにします。(さ|た)..この文字列を使用して検索すると、「さとう」や「たなか」と言った名字がヒットします。逆に、「さいとう」や「たかはし」と言った名字はヒットしません。このように、正規表現を利用すれば1つの文字列で複数の文字列を検索することが出来るようになるのです。

    メタ文字とは?

    メタ文字(メタキャラクタ)とは、プログラム上で特別な意味を持たせた文字の事です。本来の意味とは異なる使い方をされる文字がこのように呼ばれます。正規表現ではピリオド「.」は「文章の終わり、句点」という意味ではなく、「任意の1文字」と言う意味を持ちます。そのため、「あいう」という文字列を「.」で検索すると、それぞれ「あ」と「い」と「う」がヒットします。このように、本来の意味とは別の利用法をされる文字のことを、メタ文字(メタキャラクタ)と呼びます。

    Javaで利用されるメタ文字

    メタ文字は、利用するプログラミング言語やテキストエディタで異なる場合があります。また、利用できるメタ文字も多く存在しています。今回は、Javaで利用できるメタ文字について、基本的なものをご紹介します。
    記号の説明使用例の結果

    . 任意の1文字 a.. “abc”など、aから始まる3文字
    ? 0または1回 a? “a”または”aa”
    + 1回以上 a+ “aa””または”aaa”など、直前の文字を1回以上繰り返した文字列
    * 0回以上 a* “a”または”aa”など、直前の文字を0回以上繰り返した文字列
    [] []内のいずれかの文字 [abc]または[a-c] “a”または”b”または”c”
    [^] []内以外の文字 [^abc]または[^a-c] “a””、””b””、””c””以外の1文字
    {n} n回 a{1} “a”
    {n,} n回以上 a{1,} “a”または”aa”など、直前の文字を1回以上繰り返した文字列
    {,n} n回以下 a{,2} “a”または”aa”など、直前の文字を2回以下繰り返した文字列
    {n,m} n回以上、m回未満 a{1,3} “a”または”aaa”など、直前の文字を1回以上3回以下繰り返した文字列
    | …または… a|1 “a”または”1″のどちらか
    () ()内をグループ化 (a|1|あ) “a”または”1″または”あ”のいずれか
    ^ 文頭 ^a “”abc””など、aから始まる文字列
    $ 文末 a$ “”cba””など、aで終わる文字列

    以上が基本的なメタ文字になります。Javaで利用できるもっと複雑なメタ文字を知りたい場合はJavaDocを参照してください。書かれている内容は少々複雑ですので、最初のうちは実際にプログラミングで利用しながら覚えていくことをおすすめします。

    Javaでの正規表現の利用方法

    Javaで正規表現を使うのは、文字列の検索、置換を行う場合です。Stringクラスのmatchesメソッドや、 Patternクラスのcompileメソッドなどで利用することが可能です。それでは、実際にサンプルコードを見ながらJavaでの正規表現の使い方を確認しましょう。

    文字列の全体が一致しているかチェックする

    正規表現で指定したパターンと文字列の全体が一致するかを確認する場合、JavaではStringクラスのmatchesメソッドを利用します。matchesメソッドは、Stringクラスの文字列全てと完全一致する場合にTrueを返します。そのため、基本的には文字数も一致させる必要があります。実際に、「””さ””、または””た””から始まる3文字の文字列」を検索するコードを使用し、利用方法を確認してみましょう。

    サンプルコード

    実行結果

    このように、文字数が4文字の””さいとう””や””たかはし””ではfalseを返しています。文字数を指定しない場合や、文字列内のどこかに含まれているかどうかを確認したい場合は、正規表現を下記のように変更します

    文字列の検索を行う

    文字列のいずれかの部分に一致するパターンがあるかを検索したい場合、つまり部分一致を検索したい場合には、JavaではMatcherクラスのfindメソッドを利用します。この際、以下の2つのクラスをインポートしておく記述が必要となります。

    ・java.util.regex.Matcher・java.util.regex.Patternでは、文字列の中に「アルファベットが1文字含まれているか」、「2文字の連続するアルファベットが含まれているか」を確認するサンプルコードを見てみましょう。

    サンプルコード

    実行結果

    これは”あ1aい2bう3c”と言う文字列を、指定したパターンで検索しているコードです。検索元となる文字列の中に、2文字以上連続しているアルファベットは存在していないため、[a-z]で検索した場合はtrue、[a-z]{2}で検索した場合はfalseを返しています。

    文字列の置換を行う

    文字列の中にある特定の文字を違う文字に置き換えたい場合、つまり置換を行いたい場合は、JavaではMatcherクラスのreplaceAllメソッド、またはreplaceFirstメソッドを利用することになります。replaceAllメソッドは「マッチした文字列を全て入れ替える」のに対し、replaceFirstメソッドは「最初にマッチした文字列のみを入れ替える」という処理を行います。それでは実際にreplaceAllとeplaceFirstを利用したサンプルコードを見ていきましょう。

    サンプルコード

    実行結果

    “[a-z]+”は「任意の文字数のアルファベット」、””[0-9]+””は「任意の文字数の数字」を表しています。replaceAllで検索した場合はマッチした文字列が全て指定した文字列に置き換えられているのに対し、replaceFirstでは最初にマッチした文字列のみが置き換えられています。

    システム
    エンジニア
    Javaでの正規表現はさまざまな利用方法があるのですね。

    プロジェクト
    マネージャー
    そうですね。方法を理解すれば、他のプログラミング言語にも応用できるので便利ですよ。

    まとめ

    正規表現は、上手く利用すれば非常に便利な機能です。一見難しそうに見えますが、基本さえわかってしまえばすぐに覚えることが出来るでしょう。まずは、ご紹介した基本的なものから利用してみてください。正規表現は一度覚えてしまえば他の言語でもほとんど同じ表現で利用することが出来ます。プログラミングの上達のためにも、どんどん活用していきましょう。

    FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    Java新着案件New Job