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

3
我正在尝试编写一个正则表达式,以在Java程序中识别出现在输入中的模式,其次数未知。我的简单示例是: String patString = "(?:.*(h.t).*)*"; 然后我尝试通过循环遍历matcher.group(i)来访问来自像"the hut is hot"这样的行的匹配项。它只会记住最后一次匹配(在本例中为"hot"),因为只有一个捕获组--我猜matcher.group(1)的内容被重用时会被覆盖。但我想要的是某种包含"hut"和"hot"的数组。 是否有更好的方法?值得一提的是,我真正想做的是在信号词后捕捉所有(可能是多个单词的)专有名词,其中可能会有其他单词和标点符号。因此,如果"saw"是信号词,我们有"I saw Bob with John Smith, and his wife Margaret",我想要{"Bob","John Smith","Margaret"}。

只使用 h.t 作为模式字符串怎么样? - vbence
如果我只使用(h.t)(用括号将其变成捕获组),那么我只会得到第一个匹配项,而不是最后一个。 (这是你的意思吗?) - umbraphile
我在这里询问了自己的问题:https://dev59.com/_2445IYBdhLWcg3wIG19 - aioobe
哎呀,我怎么没看到那个问题?在发帖之前我看了很多类似的话题,但你是对的,你的问题完全一样。听起来不太乐观——你是怎么解决这个问题的? - umbraphile
@umbraphile,你其实不需要括号。group()或者group(0)会返回整个匹配。 - vbence
1个回答

6

好的 - 我已经用我的帽子/小屋/热例子试过了,没问题 - 只需要将它翻译成我更复杂的实际问题!谢谢。 - umbraphile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接