.NETでは、文字のシーケンスを、何度も発生するキャプチャグループを表すパターンと照合する場合は、次のように記述できます。
String input = "a, bc, def, hijk";
String pattern = "(?<x>[^,]*)(,\\s*(?<y>[^,]*))*";
Match m = Regex.Match(input, pattern);
Console.WriteLine(m.Groups["x"].Value);
//the group "y" occurs 0 or more times per match
foreach (Capture c in m.Groups["y"].Captures)
{
Console.WriteLine(c.Value);
}
このコードは次のように出力します。
a
bc
def
hijk
これは簡単に思えますが、残念ながら、次のJavaコードは.NETコードのようには機能しません。(java.util.regexはグループとキャプチャを区別していないように見えるため、これは予想されます。)
String input = "a, bc, def, hijk";
Pattern pattern = Pattern.compile("(?<x>[^,]*)(,\\s*(?<y>[^,]*))*");
Matcher m = pattern.matcher(input);
while(m.find())
{
System.out.println(m.group("x"));
System.out.println(m.group("y"));
}
プリント:
a
hijk
null
正規表現を書き直したり、外部ライブラリを使用したりせずに、Javaを使用して同じことを実現する方法を誰かが説明できますか?