Search for
([^()]*)
and replace with nothing.
As a verbose regex:
( # match an opening parenthesis
[^()]* # match any number of characters except parentheses
) # match a closing parenthesis
This will work fine if parentheses are correctly balanced and unnested. If parentheses can be nested (like this (for example))
, then you need to re-run the replace until there are no further matches, since only the innermost parentheses will be matched in each run.*
To remove brackets, do the same with [[^[]]*]
, for braces {[^{}]*}
.
With conditional expressions you could do all three at once, but the regex looks ugly, doesn't it?
(?:(()|([)|({))[^(){}[]]*(?(1)))(?(2)])(?(3)})
However, I'm not sure if NSRegularExpression can handle conditionals. Probably not. Explanation of this monster:
(?: # start of non-capturing group (needed for alternation)
(() # Either match an opening paren and capture in backref #1
| # or
([) # match an opening bracket into backref #2
| # or
({) # match an opening brace into backref #3
) # end of non-capturing group
[^(){}[]]* # match any number of non-paren/bracket/brace characters
(?(1))) # if capturing group #1 matched before, then match a closing parenthesis
(?(2)]) # if #2 matched, match a closing bracket
(?(3)}) # if #3 matched, match a closing brace.
*You can't match arbitrarily nested parentheses (since these constructs are no longer regular) with regular expressions, so that's not a limitation of this regex in particular but of regexes in general.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…