规则中是否存在子匹配表达式的规范排序 表达?
例如:中的子匹配顺序是什么 “(([0-9] {3})。([0-9] {3})。([0-9] {3})。([0-9] {3}))\ S +([ AZ] +)“?
a. (([0-9]{3})\.([0-9]{3})\.([0-9]{3})\.([0-9]{3}))\s+([A-Z]+)
(([0-9]{3})\.([0-9]{3})\.([0-9]{3})\.([0-9]{3}))
([A-Z]+)
([0-9]{3})
([0-9]{3})
([0-9]{3})
([0-9]{3})
b. (([0-9]{3})\.([0-9]{3})\.([0-9]{3})\.([0-9]{3}))\s+([A-Z]+)
(([0-9]{3})\.([0-9]{3})\.([0-9]{3})\.([0-9]{3}))
([0-9]{3})
([0-9]{3})
([0-9]{3})
([0-9]{3})
([A-Z]+)
或
c. somthin' else.
答案 0 :(得分:4)
它们往往按照捕获的开始,从左到右的顺序编号。因此,选项b。
答案 1 :(得分:2)
在Perl 5正则表达式中,答案b是正确的。子匹配分组按开括号的顺序存储。
许多其他正则表达式引擎从Perl中获取提示,但您必须查找单个实现以确定。我建议将这本书Mastering Regular Expressions用于更深入的理解。
答案 2 :(得分:0)
从左到右计算左括号。所以订单将是
(([0-9]{3}).([0-9]{3}).([0-9]{3}).([0-9]{3}))
([0-9]{3})
([0-9]{3})
([0-9]{3})
([0-9]{3})
([A-Z]+)
至少这是Perl会做的事情。其他正则表达式引擎可能有不同的规则。