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