I am trying to have a regex to capture all strings with this shape:
(not (xx))
I.e. a parenthesis, a "not", two empty spaces, two caracters between parenthesis and a closing parenthesis
I have tried:
(not (*))
But I get:
Invalid regular expression. Nothing to repeat
Any idea ?
CodePudding user response:
The Nothing to repeat error is due to the * quantifier used to quantify an opening bracket of a capturing group construct.
You need to 1) escape special ( and ) chars, and 2) match any text between the closest ( and ) with a negated character class, here, with [^()]*:
\(not \([^()]*\)\)
Details:
\(not \(- a(not (string[^()]*- zero or more chars other than(and)\)\)- a))string.
If there can be any zero or more whitespace chars between not and (, replace the literal spaces with \s*. If there must be one or more whitespaces, use \s instead:
\(not\s*\([^()]*\)\)
\(not\s \([^()]*\)\)

