再帰的な Perl 正規表現を使用して、ネストされた singlechar ブラケットをスキャンします。
$RE = qr'(?:[\(]((?:(?>[^\(\)]+)|(??{$RE}))*)[\)])';
これにより、次のような c 関数呼び出しをスキャンできます。
"func (a(b()))" ~= /$RE/
"(a(b()))" に一致します。ここで、パスカル スタイルのネストされた [if,if-end] ブラケットを解析したいと思います。
if (a) then
if (b) then
blaif := 1;
else
blaend := 2;
end if;
end if;
上記の $RE を次のように書き換えようとしました。
$RE_if = qr'(?:(?:if)((?:(?>(?!(?:\bif\b|\bend\s+if))+)|(??{$RE_if}))*)\
(?:\bend\s+if))';
しかし、それはちょっとうまくいきません。["if","end if"] のような複数文字の括弧を処理する正規表現を誰かが持っていますか?
-- こんにちはコンラッド