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 に答える