String template = "key1=value1&key2=value2&key3=value3";
String pattern = "&?([^&]+)=";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(template);
while (m.find())
{
System.out.println(m.group(1)); //prints capture group number 1
}
出力:
key1
key2
key3
もちろん、これは次のように短縮できます。
Matcher m = Pattern.compile("&?([^&]+)=").matcher("key1=value1&key2=value2&key3=value3");
while (m.find())
{
System.out.println(m.group(1)); //prints capture group number 1
}
壊す:
"&?([^&]+)=";
&?
: 0 または 1 と&
[^&]+
一致する 1 つ以上の文字が等しくない&
([^&]+)
上記の文字をキャプチャする (それらを抽出できます)
&?([^&]+)=
0 または 1 で始まり、&
で終わるように上記の文字をキャプチャします=
=
注: inを除外しませんでしたが[^&]
、この式は機能します。これは、記号が含まれる何かと一致する=
場合、その文字列にも「&」が含まれるため[^&=]
不要であるためです。