検索
連載

クラスライブラリを攻略「ユーティリティ編」基礎から学ぶサーブレット/JSP(8)(3/5 ページ)

Share
Tweet
LINE
Hatena

正規表現でメールアドレスを取得する―Pattern/Matcherクラス(1)―

 電子メールのアドレスやURLパターン、郵便番号、電話番号など、比較的複雑な文字列パターンを検索・照合したいという場合に、正規表現は強力な手段を提供します。

 例えば「999-9999」からなる郵便番号をチェックしたいといった場合にも、従来の方法では「全部で8けたであること」「1〜3、5〜8けた目が数値であること」「4けた目がハイフンであること」をチェックしなければならず、また、それが関係ない文字列中に混在している場合には、さらに複雑なロジックを組まなければなりませんでした。

 しかし、正規表現を用いることでこうしたロジックをまったく必要としなくなります。正規表現パターンは一見複雑で無意味な記号の羅列にも見えますが、シンプルかつ簡潔にこうした規則性を記述することができるのです。

 ここでは、与えられたフリーフォーマットの文字列中から電子メールのアドレスのみを検索、抽出する方法を紹介することにしましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

画文字列中からメールアドレスのみを順に取り出します
画文字列中からメールアドレスのみを順に取り出します

ロジックの概要

 Pattern#compileメソッドは引数として渡された正規表現パターンを、プログラム中から利用できる形にコンパイルします(本稿では正規表現パターンの詳細については詳述しません。下記の正規表現パターンを参考に、どのようなパターンを表現しているのかを確認してみてください)。

 Pattern#matcherメソッドは引数として渡された文字列について正規表現検索を行い、マッチング結果をMatcherオブジェクトとして返します。Matcherオブジェクトにはマッチング(開始・終了)位置やマッチング文字列などの情報を含みます。

 Matcherオブジェクトに含まれるマッチング文字列は、groupメソッドを介して順に取得することができます。findメソッドは未取得のマッチング結果が存在するかどうかをtrue/falseで返しますので、findメソッドがtrueを返す間(falseを返すまで)whileループを繰り返すことで、全マッチング結果を取得することができます。

正規表現パターンを記述する場合の注意

 Javaで正規表現パターンを記述する場合には、以下の点に注意してください。

(1)「\」は「\\」で記述する

正規表現パターンの中で特別な意味を持つ「\」は、Javaにおいてもエスケープ文字を表す特殊文字です。そのため、「\」は必ず「\\」のようにエスケープしたうえで使用しなければなりません。

(2)J2SE 1.3以前では使用できない

正規表現機能を実現するjava.util.regexパッケージはJ2SE 1.4から導入されました。J2SE 1.3以前ではjava.util.regexパッケージは使用することができませんので、注意してください。J2SE 1.3以前で正規表現機能を使用したいという場合には、Jakarta ORO(http://jakarta.apache.org/oro/)などを導入する必要があります。

 java.util.regexパッケージで使用することのできる正規表現パターンには、以下のようなものがあります。あくまで主要なものの一部にすぎませんが、これらのパターンをマスタするだけでもかなり柔軟な表現が可能となるはずです。

主な正規表現パターン

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

正規表現パッケージを用いることで、複雑な文字列パターンを抽出・操作することが可能となります。例えば、Pattren#matcherメソッドは、URLやE-Mailアドレスをフリーのドキュメントから抽出する場合などに強力な効果を発揮します。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る