我使用递归 Perl 正则表达式来扫描嵌套的单字符括号:
$RE = qr'(?:[\(]((?:(?>[^\(\)]+)|(??{$RE}))*)[\)])';
这让我可以扫描 c 函数调用,例如:
"func (a(b()))" ~= /$RE/
匹配 "(a(b()))" 。现在我想解析 Pascal 风格的嵌套 [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"] 这样的多字符括号吗?
——问候康拉德