我有以下字符串:
The {quick} brown fox {jumps {over {deep} the} {sfsdf0} lazy} dog {sdfsdf1 {sdfsdf2}
PHP正则表达式:
/(?=\{((?:[^{}]+|\{(?1)\})+)\})/g
它会得到以下匹配结果:
[5-10] `quick`
[23-60] `jumps {over {deep} the} {sfsdf} lazy`
[30-45] `over {deep} the`
[36-40] `deep`
[48-54] `sfsdf0`
[76-83] `sdfsdf2`
查看:http://regex101.com/r/fD3iZ2。
我正在尝试在Ruby中实现相同的功能,但我遇到了一个问题:(?1)
导致未定义的组选项
错误:
str = "The {quick} brown fox {jumps {over {deep} the} {sfsdf} lazy} dog {sdfsdf {sdfsdf}"
str.scan /(?=\{((?:[^{}]+|\{(?1)\})+)\})/
SyntaxError: undefined group option: /(?=\{((?:[^{}]+|\{(?1)\})+)\})/
巧合的是,我在JavaScript和Python中都遇到了同样类型的错误。
我的正则表达式技能今天几乎已经用完了,非常感谢您提供帮助。
?
在JavaScript和Ruby中是括号内的保留字符。 - Qantas 94 Heavy(?1)
在Javascript中被认为是可以接受的,它意味着递归第一个子模式。由于我在Ruby、Javascript和Python中都遇到了相同的错误,我认为问题在于括号分组,而不是?1
。 - Dom