Захват квантификаторов и квантификатор арифметики
Прежде всего позвольте мне объяснить, что этот вопрос не связан ни с тем, как собирать группы, ни с тем, как использовать квантификаторы, а с двумя особенностями регулярного выражения, с которыми я прекрасно знаком. Это более сложный вопрос для любителей регулярных выражений, которые могут быть знакомы с необычным синтаксисом в экзотических движках.
Захват квантификаторов
Кто-нибудь знает, позволяет ли аромат регулярных выражений захватывать квантификаторы? Под этим я подразумеваю, что будет подсчитано количество символов, совпадающих с квантификаторами, такими как + и *, и что это число может быть снова использовано в другом квантификаторе.
Например, предположим, что вы хотели убедиться, что у вас есть одинаковое количество Ls и Rs в строке этого вида: LLLRRRRR
Вы можете представить себе такой синтаксис, как
L(+)R{\q1}
где квантификатор + для L захвачен, и где захваченное число упоминается в квантификаторе для R как {\ q1}
Это было бы полезно, чтобы сбалансировать количество {@, =, -, /} в таких строках, как @@@@ "Star Wars" ==== "1977" ---- "Научная фантастика" //// " Джордж Лукас "
Отношение к рекурсии
В некоторых случаях захват квантификатора элегантно заменяет рекурсию, например фрагмент текста, обрамленный таким же количеством букв L и R,
L(+) some_content R{\q1}
Идея представлена в некоторых деталях на следующей странице:Захваченные квантификаторы
Здесь также обсуждается естественное расширение захваченных квантификаторов: арифметика квантификаторов, для случаев, когда вы хотите сопоставить (3 * x + 1) количество символов, сопоставленных ранее.
Я пытаюсь выяснить, существует ли что-то подобное.
Заранее спасибо за ваши идеи !!!
Обновить
Казимир дал фантастический ответ, который показывает два метода для проверки того, что различные части шаблона имеют одинаковую длину. Тем не менее, я не хотел бы полагаться на любой из них для повседневной работы. Это действительно трюки, которые демонстрируют отличное зрелищность. На мой взгляд, эти красивые, но сложные методы подтверждают предпосылку вопроса: функция регулярного выражения для захвата количества символов, которые могут быть сопоставлены квантификаторами (такими как + или *), сделает такие шаблоны балансировки очень простыми и расширит синтаксис в приятно выразительный способ.
Обновление 2 (много позже)
Я обнаружил, что .NET имеет функцию, которая приближается к тому, о чем я спрашивал. Добавлен ответ, чтобы продемонстрировать функцию.