行に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
}
正規表現全体を複製してテストする代わりに、より良い方法があるに違いないと思います。