转载:http://www.regexlab.com/zh/deelx/syntax/ext_recs.htm
递归表达式 (?R)
对另一部分子表达式的引用,而不是对其匹配结果的引用。当被引用的表达式包含自身,则形成递归引用。
说明
相对于 “反向引用” 来说,反向引用是在匹配过程中,对匹配到的字符串内容进行引用,而 “递归匹配” 是对表达式进行引用。举例说明:
表达式 | 等效的表达式1 | 等效的表达式2 | 可以匹配 |
---|---|---|---|
(\w)(?1) | (\w)(\w) | ab | |
(?1)(\w(?2))(\d) | (?1)(\w(\d))(\d) | (\w(\d))(\w(\d))(\d) | a1b23 |
如果被引用的表达式又包含自身,则形成了递归引用。举例说明:
表达式 | 等效1 | 等效2 | 可以匹配 |
---|---|---|---|
(\w(?1)?) | (\w(\w(?1)?)?) | (\w+) | ghjk5…… |
(([^()] | (?R))*) | (([^()] | (([^()] |
DEELX 支持的递归表达式格式有:
格式 | 说明 |
---|---|
(?R) | 对整个表达式的递归引用。 |
(?R1),(?R2) | 对指定分组的递归引用。 |
(?1),(?2) | 对指定分组的递归引用。 |
(?R) | 对指定命名分组的递归引用。 |
(?R’named’) | 对指定命名分组的递归引用。 |