rubytomato's “Getting Started”

Webアプリケーション開発の入門的な記事を投稿していきます。

Javaで正規表現 <前方不一致、後方一致>の例

Java正規表現

ある文字列の前方不一致且つ、ある文字列の後方一致という条件でマッチングさせるサンプルコードです。

例題

以下のようなメールアドレスのリストがあり、この中からAUとドコモのメールアドレスで(後方一致)且つ、アドレスが"bbb"で始まらない(前方不一致)メールアドレスを正規表現で抽出する例です。

String array[] = {
    "aaa.bbb@au.com",
    "bbb.ccc@au.com",
    "ccc.ddd@au.com",
    "aaa.bbb@docomo.ne.jp",
    "bbb.ccc@docomo.ne.jp",
    "ccc.ddd@docomo.ne.jp",
    "aaa.bbb@softbank.ne.jp",
    "bbb.ccc@softbank.ne.jp",
    "ccc.ddd@softbank.ne.jp",
    "dummy string",
    "ノイズ",
    "aaa.bbb.ccc-docomo.ne.jp"
};

正規表現

String regex = "^((?!bbb).+)@(au.com|docomo.ne.jp)$";
Pattern p = Pattern.compile(regex);

マッチングは

for (String email : array) {
    System.out.print("email [" + email + "] ---> ");
    Matcher m = p.matcher(email);
    if (m.find()) {
        String g1 = m.group(1);
        String g2 = m.group(2);
        System.out.println("match: " + g1 + "@" + g2);
    } else {
        System.out.println("not match");
    }
}

実行結果は

email [aaa.bbb@au.com] ---> match: aaa.bbb@au.com
email [bbb.ccc@au.com] ---> not match
email [ccc.ddd@au.com] ---> match: ccc.ddd@au.com
email [aaa.bbb@docomo.ne.jp] ---> match: aaa.bbb@docomo.ne.jp
email [bbb.ccc@docomo.ne.jp] ---> not match
email [ccc.ddd@docomo.ne.jp] ---> match: ccc.ddd@docomo.ne.jp
email [aaa.bbb@softbank.ne.jp] ---> not match
email [bbb.ccc@softbank.ne.jp] ---> not match
email [ccc.ddd@softbank.ne.jp] ---> not match
email [dummy string] ---> not match
email [ノイズ] ---> not match
email [aaa.bbb.ccc-docomo.ne.jp] ---> not match