Question

Following strings - match:

"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"

Inside every braces can be unlimited groups of them but they have to closed properly.

Any Idea's? Don't know how to test properly closeness..

Have to use Perl-Regular-Expression

Was it helpful?

Solution

In Perl or PHP, for example, you could use a regex like

/\((?:[^()]++|(?R))*\)/

to match balanced parentheses and their contents.

See it on regex101.

To remove all those matches from a string $subject in Perl, you could use

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

Explanation:

\(       # 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 )
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top