正则表达式捕获未知数量的重复组

时间:2011-03-26 19:39:51

标签: java regex capture-group

我正在尝试编写一个正则表达式,以便在Java程序中使用,该程序将识别输入中可能出现未知次数的模式。我愚蠢的小例子是:

String patString = "(?:.*(h.t).*)*";

然后我尝试通过循环matcher.group(i)从像“小屋很热”这样的行中访问匹配。它只会记住最后一个匹配(在这种情况下,“热”)因为只有一个捕获组 - 我猜想matcher.group(1)的内容会被重写,因为捕获组会被重用。但是,我想要的是某种包含 “hut”和“hot”的数组。

有更好的方法吗? FWIW,我真正想做的是在信号词之后拾取所有(可能是多字的)专有名词,其间可能有其他单词和标点符号。因此,如果“看到”是信号,我们“我看到鲍勃与约翰史密斯和他的妻子玛格丽特,”我想要{“鲍勃”,“约翰史密斯”,“玛格丽特”}。

1 个答案:

答案 0 :(得分:6)

(类似问题:Regular expression with variable number of groups?

这是不可能的。您最好的选择是使用h.t,然后使用

while (matcher.find()) {
    ...
    ... matcher.group(1); ...
    ...
}

功能does exist in .NET,但如上所述,Java中没有对应物。