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