使用我发现的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}
谢谢你们。
答案 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
}