daybreaksnow's diary

私を私と呼びたい

[Java7]正規表現のグループに名前を付ける

Java6以前では正規表現にヒットした文字列をするために、Matcher.group(int)で何番目のグループかを指定しなければならなかった。

順番指定だと、新たにグループを付け足した際にすべて修正が必要であり、正規表現の黒魔術度を上げていた。

Java7では、"(?<グループ名>正規表現)"でグループに名称をつけることができ、Matcher.group(String)で取得することができる。


サンプルコード

String regrex = "(?<TYPE>GET|POST) (?<IP>\\d+\\.\\d+\\.\\d+\\.\\d+)";
String sample = "GET 127.16.0.1";
Matcher matcher = Pattern.compile(regrex).matcher(sample);
if(matcher.find()){
	System.out.println(matcher.group(1)); //GET
	System.out.println(matcher.group("TYPE")); //GET
	System.out.println(matcher.group(2)); //127.16.0.1
	System.out.println(matcher.group("IP")); //127.16.0.1
}