2008-09-17 11 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が行うことです。他の正規表現エンジンには異なる規則があります。