我正在尝试学习正则表达式中的递归,并对 PCRE 风格中的概念有一个基本的了解。我想打破一个字符串:
Geese (Flock) Dogs (Pack)
进入:
Full Match: Geese (Flock) Dogs (Pack)
Group 1: Geese (Flock)
Group 2: Geese
Group 3: (Flock)
Group 4: Dogs (Pack)
Group 5: Dogs
Group 6: (Pack)
我知道两个正则表达式都不能做到这一点,但我对第一个模式有效而第二个模式不起作用的原因更加好奇。
Pattern 1: ((.*?)(\(\w{1,}\)))((.*?)(\g<3>))*
Pattern 2: ((.*?)(\(\w{1,}\)))((\g<2>)(\g<3>))*
此外,例如,如果您正在处理一个长字符串,并且一个模式重复自身,是否可以不断扩展完整匹配,并逐渐增加组,而无需编写与正则表达式分开的循环语句。
Full Match: Geese (Flock) Dogs (Pack) Elephants (Herd)
Group 1: Geese (Flock)
Group 2: Geese
Group 3: (Flock)
Group 4: Dogs (Pack)
Group 5: Dogs
Group 6: (Pack)
Group 7: Elephants (Herd)
Group 8: Elephants
Group 9: (Herd)
这是我最接近的模式,但中间组:Dogs (Pack) 变为 Group 0。
((.*?)(\(\w{1,}\)))((.*?)(\g<3>))*