正则表达式子匹配编号
时间:2020-03-05 18:59:57 来源:igfitidea点击:
常规中子匹配表达式的规范排序吗
表达?
例如:子匹配的顺序是什么
"(([[[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.
解决方案
回答
它们通常按照捕获对象从左到右的顺序编号。因此,选项b。
回答
在Perl 5正则表达式中,答案b是正确的。子匹配项分组以开括号的顺序存储。
许多其他正则表达式引擎从Perl中获得了启发,但是我们必须确定单个实现才能确定。我建议读一本精通正则表达式的书,以加深理解。
回答
我们可以数出左括号,从左到右。所以命令是
(([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会做的。其他正则表达式引擎可能具有不同的规则。