次の正規表現パターンを使用して、C# スタイルで記述された if ステートメントに一致させています。
\b[if]{2}\b[ ]?\({1}(?<HeaderSection>[ \w\s\a\t\=\.\@\#\$\%\&a-zA-Z0-9\(\)\;\/\"\'\[\]\*]*)\){1}(?<CommentSection>[\s\a\w\t a-zA-Z0-9\/\.]*)[\r\n]*\{{1}(?<FunctionBody>[\r\n \a\s\wa-zA-Z0-9\(\)\"\.\;\:]*)[\r\n]*\}{1}
その非常に長い正規表現パターンですが、ある程度機能しているようです.説明させてください.3つの名前付きキャプチャグループ、つまりHeaderSection、CommentSection、およびFunctionBodyがあります。下;
if(Value1==Function(int Z))
キャプチャします。
Value1==Function(int Z)
同様に、CommentSection は閉じ括弧の後にコメント (存在する場合) をキャプチャするため、以下のステートメントから;
if(Value1==Function(int Z))//This is a Comment.
それはキャプチャします
//This is a Comment.
FunctionBody は、以下のコードのように { と } の間のすべてをキャプチャします。
if(Value1==Function(int Z))//This is a Comment.
{
This is the
space for
function body.
}
「これは関数本体のスペースです」をキャプチャします。これが、正規表現が一致するものの説明でした。今の問題は、私がこのような関数を持っている場合です。
if(Value1==Function(int Z)//This is a Comment.
{
if(Value2==Value1)
{
Some code
}
}
上記の正規表現を使用して一致させると、最初の if 宣言と一致しません。
if(Value1==Function(int Z)//This is a Comment.
{
Another function();
}
代わりに内側のものと一致します
if(Value2==Value1)
{
Some code
}
私が間違ったことを指摘してください。または、それほど面倒ではない別の方法がある場合はお知らせください。または、どこかで間違っている場合は正規表現パターンを修正してください。前もって感謝します。