1

行に2つのアンダースコアが含まれているかどうかを識別するために、この正規表現があります。

\s*_{2}(\w+)

任意のスペース、2 つのアンダースコア、および単語。アンダースコアがまったくないことも知る必要があることが判明したので、次のようにしました。

\s*(\w+)

オプションのスペースの後に単語が続きます。次に、単語であるグループ 1 を取得します。ここまでは順調ですね。

問題は、2 つのアンダースコアが使用されている場合に実行されるアクションであり、アンダースコアが使用されていない場合のコードとほとんど同じです (フラグを立てることを除いて)

if( s =~ uderscore ) { 
   takeGroup( 1 )
   yada yada 
   flag = true
} else if( s =~ noUnderscore { 
  takeGroup( 1 ) 
  yada yada 
   flag = false 
}

正規表現全体を複製してテストする代わりに、より良い方法があるに違いないと思います。

4

2 に答える 2

6

代わりに次の正規表現を使用してください。

\s*(_{2})?(\w+)

次に、最初のグループの存在を単純にテストします。存在する場合は、アンダースコアが存在していました。グループ 1 だったものがグループ 2 になります。

于 2011-01-11T21:23:29.527 に答える
3
\s*(__)?(\w+)

(__)?オプションの 2 つのアンダースコアのグループです。(?:__)単語はグループ 1 ではなくグループ 2 にあることに注意してください。グループの番号付けを変更したくない場合は、代わりに非キャプチャ グループを使用できます。

于 2011-01-11T21:23:50.837 に答える