I'm trying to parse mathematical expressions with nested brackets:
(1 * (2 - 3)) + 4
I want to get every expression in brackets, like this:
(1 * (2 - 3))(2 - 3)
Using this expression: (.*?\))(?=($|[^(]+)) I'm getting this result:
(1 * (2 - 3)
)
And using this expression: \(.*?\) I'm getting this result:
(1 * (2 - 3)
But nothing works correctly. How can I loop an expression inside?
You can use
See the regex demo. Details:
(?=- a positive lookahead:(\((?>[^()]+|(?<c>)\(|(?<-c>)\))*(?(c)(?!))\)))- Group 1:\(- a(char(?>[^()]+|(?<c>)\(|(?<-c>)\))*- zero or more repetitions of any one or more chars other than(and), or a(char (with a value pushed onto Group "c" stack), or a)char (with a value popped from the Group "c" stack)(?(c)(?!))- if Group "c" stack is not empty, fail and backtrack\)- a)char.See the C# demo: