在 .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 来完成相同的任务,而无需重新编写正则表达式或使用外部库吗?