2008-09-17 153 views
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

他們往往在捕獲括號的啓動順序,從左到右進行編號。因此,選項b。

2

在Perl 5正則表達式中,答案b是正確的。子匹配組按照開括號的順序存儲。

許多其他正則表達式引擎從Perl中提取它們的提示,但是您必須查找單個實現才能確定。我建議書Mastering Regular Expressions有更深的理解。

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會做的。其他正則表達式引擎可能有不同的規則。