捕获重复的命名组

时间:2015-04-03 01:40:30

标签: java regex

我有以下字符串class teacher john smith pupils max power al bundy 我怎样才能捕获史密斯先生的所有学生的名字?

我创建了这个正则表达式 (?:^class teacher )(?<teacher>(?<first>\w+) (?<last>\w+)) pupils (?<pupil>(?<pfirst>\w+) (?<plast>\w+) )+ 但它遗漏了学生al bundy

在Java和Regex101上进行了测试。

1 个答案:

答案 0 :(得分:2)

您无法重复捕获组,因为最后一个匹配的值将覆盖前一个。

解决此类问题的方法包括使用find方法和\G锚来获取连续匹配:

(?:\G(?!\A) |\Aclass teacher (?<teacher>(?<first>\w+) (?<last>\w+)) pupils )(?<pupil>(?<pfirst>\w+) (?<plast>\w+))

demo

(显然,另一种方法是捕获一组中的所有学生并将其拆分)