У меня есть приложение для создания документов, которое обрабатывает замену тегов. Я использую регулярное выражение для обнаружения указанных тегов. Эти теги могут быть разных типов. Для наглядности давайте учтем следующее:
Я без проблем работал с ними и обнаружил их с помощью выражения RegeX /\{\{([^:]+)::([S|C|R|A])\}\}/g
Я хочу ввести вложенные теги на максимальном уровне 1, и вот в чем проблема. Я пробовал несколько подходов.
Первый подход Попробуйте здесь
/\{\{([^{]+(?:\{\{[^{}]*\}\})?)::([S|C|R|A])\}\}/g
это позволяет мне обнаружить только один вложенный тег, но, как вы можете видеть, у альтернативного тега с ним проблемы.
Второй подход Попробуйте здесь
/\{\{(.+(?:\{\{[^{}]*\}\})?)::([S|C|R|A])\}\}/g
это обнаруживает несколько вложенных тегов, но когда в тексте есть несколько тегов, он ломается.
Любая помощь?
@Barmar нашел решение. Я считаю, что это будет тот случай, когда уровень вложенности превышает 2. В моем случае он ограничен 1.
Нашёл решение: /\{\{([^{}]*(?:\{\{[^{}]*\}\}[^{}]*)*)::([SCRA])\}\}/g
Я не понимаю, как это можно использовать для анализа вложенных структур, таких как ... {{... {{...::A}} ...::A}} ... {{... {{... {{...::A}} ...::A}} ...::A}} ...
. Если не использовать анализатор LL и анализатор деревьев, вы можете использовать регулярные выражения, если временно аннотируете уровень вложенности. Подробности смотрите на twiki.org/cgi-bin/view/Blog/BlogEntry201109x3
@PeterThoeny, я не могу, в моем случае использования, когда уровень вложенности всегда <= 1, это работает. Эту деталь я уточню в вопросе.
Регулярные выражения не подходят для обработки вложенных шаблонов.