小さなスクリプトパーサーを実装する際、このコードサンプルで問題が発生しました。「if {}」ステートメントを含む部分だけを選択したい場合は、貪欲で、最後の行を含めてすべてを選択する。私が使うべきものは、否定的な先読みだと思います。現在C#RegEx同じパターンで貪欲な一致を繰り返す
if [condition1]
{
task1
setparameters{a}
task2
}
if [condition2]
{
task3
}
setparameters{b}
、私が持っている:
if\b\s\[.*\]\s\{(\s|.)*\}
私はそれが別の何か他のものは、その前に来るかもしれないとして、いずれかの「もし」に壊すように単純ではないことを推測します。等しい数の開閉括弧を数えることは可能ですか?あるいは、これらの「if」ステートメントのうちの1つを選択するだけの他の魔法のような方法がありますか?
あなたは '?'とその意義についてRegexで学ぶ必要があります。修正: 'if \ b \ s \ [。* \] \ s \ {(\ s |。)*?\}' –
おそらく、なぜ私が*非欲張り - ループ内に閉じ括弧が現れる可能性があります。私はこれを表示するためにオリジナルを更新しました。 –
ああ、バランスのとれたグループを見ています。私は彼らが何だったのか分からなかったので、私は質問を掲示した。答えは素晴らしいです。読んでください:[正規表現バランスグループとは何ですか?](http://stackoverflow.com/questions/17003799/What-are-regular-expression-balancing-groups) –