Java模式重复捕获组

时间:2012-03-01 16:56:58

标签: java regex capturing-group

我有以下字符串

52x10x20x30x40

字符串可以扩展但具有相同的模式,并且在其两侧将有其他字符串:例如

"Hello something 52x10x20x30x40 bla bla bla"

我想捕获所有2位数字。

我有以下正则表达式

Pattern.compile("(\\d\\d)([x]\\d\\d)+");

但是这个正则表达式我只得到以下几组:

1: 52
2: x40

3 个答案:

答案 0 :(得分:4)

为什么不简单:

"52x10x20x30x40".split("x");

  

忘记提及双方都可以有其他字符串。

您可以搜索"\\d{2}(x\\d{2})+",并在匹配时使用split("x")

答案 1 :(得分:0)

正则表达式不支持变量组长度。

使用拆分方法,例如GuavaSplitter

Iterable<String> tokens = Splitter.on('x').split(str);

答案 2 :(得分:0)

如果您只想捕获所有两位数字,可以使用此表达式:

(?<!\d)(\d\d)(?!\d)

通常,您只能获取重复捕获组匹配的最后一个子字符串。 (.NET正则表达式在这方面有所不同。)