我有以下字符串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上进行了测试。
答案 0 :(得分:2)
您无法重复捕获组,因为最后一个匹配的值将覆盖前一个。
解决此类问题的方法包括使用find
方法和\G
锚来获取连续匹配:
(?:\G(?!\A) |\Aclass teacher (?<teacher>(?<first>\w+) (?<last>\w+)) pupils )(?<pupil>(?<pfirst>\w+) (?<plast>\w+))
(显然,另一种方法是捕获一组中的所有学生并将其拆分)