Java正则表达式,捕获多个组

时间:2012-12-30 08:22:59

标签: java regex

使用我发现的SO上的示例代码,以及我正在搜索的字符串,我正在尝试捕获一组飞机类及其座位。输入档案的飞机配置为J28W36Y156,这意味着28个J(商务)级座位,36 W(高级经济舱座位)和156 Y(经济舱)座位。

我正在使用的Java代码如下:

    s = "J12W28Y156";
    patternStr = "(\\w\\d+)+";
    p = Pattern.compile(patternStr);
    m = p.matcher(s);
    if (m.find()) {
        int count = m.groupCount();
        System.out.println("group count is "+count);
        for(int i=1;i<=count;i++){
            System.out.println(m.group(i));
        }
    }

正则表达式似乎只捕获LAST类座位配置即。 Y156。如何获得此正则表达式以捕获多个组中的所有类/席位组合。这是否与我需要指定的“贪婪”匹配有关? 我希望输出类似于数组,例如。

{J12,W28,Y156}

谢谢你们。

1 个答案:

答案 0 :(得分:6)

你的第一个错误是对\w的错误解释。这是javadoc所说的:

\w A word character: [a-zA-Z_0-9]

这意味着\w会捕获字母和数字。因此,在您考虑到字母总是大写的情况下,我会使用以下模式:

[A-Z]\d+

现在它将捕获第一个位置标记。所以你应该自己实现循环:

Pattern p = Pattern.compile("([A-Z]\\d+)");
Matcher m = p.matcher(str);
while (m.find()) {
    String place = m.group(1);
    // A12, W28 etc is here
}