Ну, есть и другие способы (хммм ... или скорее рабочие способы) сделать это, но вопрос в том, почему этот отказывает?
/
\A # start of the string
( # group 1
(?: # group 2
[^()]* # something other than parentheses (greedy)
| # or
\( (?1) \) # parenthesized group 1
) # -group 2
+ # at least once (greedy)
) # -group 1
\Z # end of the string
/x
Не соответствует строке с вложенными скобками: "(())"