Perl Regex匹配平衡括号

时间:2013-09-06 08:41:32

标签: regex perl braces

以下字符串 - 匹配:

"MNO(A=(B=C) D=(E=F)) PQR(X=(G=H) I=(J=(K=L)))" - "MNO"
"MNO(A=(B=C) D=(E=F))" - "MNO"
"MNO" - "MNO"
"RAX.MNO(A=(B=C) D=(E=F)) PQR(X=(G=H) I=(J=(K=L)))" - "RAX.MNO"
"RAX.MNO(A=(B=C) D=(E=F))" - "RAX.MNO"
"RAX.MNO" - "RAX.MNO"

每个大括号内都可以是无限组,但必须正确关闭。

任何想法?不知道如何正确测试亲密度。

必须使用Perl-Regular-Expression

1 个答案:

答案 0 :(得分:4)

例如,在Perl或PHP中,您可以使用像

这样的正则表达式
/\((?:[^()]++|(?R))*\)/

匹配平衡括号及其内容。

regex101上查看。

要从Perl中的字符串$subject中删除所有匹配项,您可以使用

$subject =~ s/\((?:[^()]++|(?R))*\)//g;

<强>说明:

\(       # Match a (
(?:      # Start of non-capturing group:
 [^()]++ # Either match one or more characters except (), don't backtrack 
|        # or
 (?R)    # Match the entire regex again, recursively
)*       # Any number of times
\)       # Match a )