小さなスクリプト パーサーを実装する際に、このコード サンプルで問題に遭遇しました。"if { }" ステートメントの間の部分とそれを含む部分のみを選択したい場合、それは貪欲で最後の行を含むすべてを選択します。私が使用すべきなのは否定的な先読みだと思います。
if [condition1]
{
task1
setparameters{a}
task2
}
if [condition2]
{
task3
}
setparameters{b}
現在、私は持っています:
if\b\s\[.*\]\s\{(\s|.)*\}
その前に別の何かが来るかもしれないので、別の「if」を壊すほど単純ではないと思います。左中括弧と右中括弧を同じ数だけ数えることは可能ですか? または、これらの「if」ステートメントの1つを選択できる他の魔法の方法はありますか?