Как составить регулярное выражение для подсчёта не экранированных круглых скобок?
Коллеги, доброго времени суток! Чего-то я никак не соображу, как правильно составить регулярку которая бы посчитала (выделила) количество выражений в круглых скобках, за исключением экранированных скобок. Помогите пожалуйста её составить...
Пример, исходная строка: aa(bb)(cc)dd\(ee\)(ff)(gg\(hh\)ii)jj()kk(\(\)) Нужно выделить из неё группы: "b", "c, "f", "g-h-i" (как одну группу). Соотв. группу "e" игнорируем, пустые круглые скобки (после "j") тоже, но при этом последние (после "k") круглые скобки должны попасть в выборку, т.к. в них содержится текст (выражение). Иначе говоря, смысл следующий: выбрать выражения в круглых скобках, между которым содержится хотя бы 1 символ (любой), при этом экранированная круглая скобка (т.е. круглая скобка перед которой стоит "слеш") считается простым символом.
регулярка - это инструмент, а не магия. не нужно использовать его там, где он не нужен.
В данном случае, одна регулярка вряд ли справится. На вашем месте я бы сперва несколько раз поправил бы строку. Например удалил бы экранированные скобки и пустые предварительно, а потом уже можно применять регулярку.
Евгений Вольф
@Wolfnsex Автор вопроса, куратор тега PHP
Регулярка всё же справилась, но за идею большое Вам спасибо! Это действительно здравая мысль (в качестве дополнения к более простой регулярке).
Написано
Евгений Вольф
@Wolfnsex Автор вопроса, куратор тега PHP
Немного потестировал... Ваше решение более универсальное, чем регулярка (хотя на 99.99% я уверен, что можно и её доработать), не понимаю, как я сам до него не додумался... нужно наверное сделать перерыв от работы, ещё раз спасибо Вам!