Получение содержимого квадратных скобок, избегая вложенных скобок

(плакат первого раза, постоянный посетитель через Google)

Я пытаюсь извлечь содержимое некоторых квадратных скобок, но у меня есть проблема. У меня есть работа для круглых скобок, как показано ниже, но я не вижу, как это должно быть изменено для работы в квадратных скобках. Я бы подумал, что замена раунда на квадрат и наоборот в этом примере должна работать, но, видимо, нет.

Он должен игнорировать скобки в скобках. Поэтому он не вернется (11), а вернется (10 (11) 12).

$preg = '#\(((?>[^()]+)|(?R))*\)#x'; $str = '123(456)(789)(10(11)12)'; if(preg_match_all($preg, $str, $matches)) { $matches = $matches[0]; } else { $matches = array(); } echo '<pre>'.print_r($matches,true).'</pre>'; This returns: Array ( [0] => (456) [1] => (789) [2] => (10(11)12) ) 

Это прекрасно. Однако, как я могу заставить это работать для строки с квадратными скобками вместо, например:

 $str = '123[456][789][10[11]12]';