1

使用我找到的 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));
        }
    }

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

{J12,W28,Y156}

多谢你们。

4

1 回答 1

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
}
于 2012-12-30T08:34:46.150 回答