Regex не очень хорош в этом. Рассмотрим следующий фрагмент:
(а) б (с (д) е)
Где каждая буква представляет запятую (цель поиска). Исходя из вашего вопроса, вы бы хотели совпадать только с запятой b
. Хитрость в том, что выражения, как правило, либо жадные, либо не жадные, без среднего уровня.
Жадное выражение будет видеть (
в самом начале сегмента и )
в самом конце и принимать все внутри них, независимо от того, где в другом месте есть закрывающие скобки. Ничего не будет совпадать.
Нечестивое выражение будет принимать только наименьший возможный набор, начиная с начала. Он будет соответствовать запятой b
, но также будет рассматривать этот сегмент как единое целое: (c(d)
, а затем перейдет также к запятой e
.
Существуют некоторые механизмы, позволяющие подсчитывать уровни вложенности, но выражения, как правило, уродливы и сложны в обслуживании: лучше всего избегать этой функции, если вы ее не понимаете.