0
我想获取列表中元素的位置和长度。因此,我想使用正则表达式分组,因为我可以获得匹配组的偏移量和长度。元素以逗号分隔,并且允许包含任何类型的字符。这里有一个例子:使用Java正则表达式分组的扫描列表
(1234,A {}, “富”)
这里是我试图做的:
String textToMatch = "(1234, A{}, \"foo\")";
Pattern p = Pattern.compile("\\(\\s*([^,]+?)(?:\\s*,\\s*([^,]+?)\\s*)*\\)");
Matcher m = p.matcher(textToMatch);
if (m.find()) {
for (int i = 1; i <= m.groupCount(); i++) {
System.out.println(m.group(i));
}
}
不幸的是,这是行不通的。我只得到第一个也是最后一个元素,但不是中间的元素。下面是上面显示的输出,我得到的代码:
1234
"foo"
如果我使用相同的正则表达式的三倍,而不是使用星操作它的工作原理。我想我在迭代组中做了一些错误的事情。有任何想法吗?
我不知道Java的正则表达式非常好,但:有没有你要我从1到任何理由低于等于groupCount(),而不是0到小于groupCount( )? – mfrankli 2012-03-16 22:08:25
@mfrankli:组是基于1的,而不是基于0的。 (这在几乎所有的正则表达式引擎中都是标准的。)在Java中,组0是一个伪组,它匹配整个匹配的子字符串。 – ruakh 2012-03-16 22:19:38