Регулярные выражения определяют регулярные языки.Регулярные языки не могут иметь областей ограниченной, но потенциально бесконечной рекурсии.
Один из способов размышления об этом состоит в том, что все Регулярные языки могут быть представлены конечным автоматом.Вам потребуется состояние для каждого возможного числа «если», но машина должна быть «конечной», так что вы в затруднении.Классический пример:
a{n}b{n}, n >= 0
(meaning n a's, followed by n b's)
Когда вы анализируете каждый a, вам нужно перейти в другое состояние (у FSM нет памяти вне состояния, в котором они находятся, это единственный способ, которым они могут запомнить n, чтобы сопоставить егопотом).Для разбора любого числа n вам понадобится бесконечное число состояний.
Это та же самая ситуация, в которой вы находитесь, регулярное выражение может выражать конечное число ifs (хотя это займет совсем немногокопирования-вставки), но не бесконечное число.Однако обратите внимание, что некоторые реализации регулярных выражений немного обманывают, давая им больше возможностей, чем их математические эквиваленты.
В любом случае, лучше всего использовать более мощный метод синтаксического анализа. парсер рекурсивного спуска особенно интересен в реализации и может легко сделать то, что вам нужно.Вы также можете заглянуть в LR-парсер или создать простой парсер, используя стек.В зависимости от вашего языка, вы можете найти библиотеку синтаксического анализа, такую как pyparse для Python или Boost Spirit для C ++.