2

正则表达式中是否存在子匹配表达式的规范排序?

例如:
"(([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. 
4

3 回答 3

4

它们往往按照捕获括号开始的顺序从左到右进行编号。因此,选项 b。

于 2008-09-17T20:35:07.843 回答
2

在 Perl 5 正则表达式中,答案 b 是正确的。子匹配分组按开括号的顺序存储。

许多其他正则表达式引擎都从 Perl 中汲取灵感,但您必须查找各个实现才能确定。我建议您阅读Mastering Regular Expressions一书以加深理解。

于 2008-09-17T20:35:24.303 回答
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 会做的。其他正则表达式引擎可能有不同的规则。

于 2008-09-17T20:39:03.700 回答