Я пишу лексера jFlex для Lua, и у меня возникли проблемы проектирования регулярное выражение, чтобы соответствовать одной конкретной части спецификации языка:Matching «Длинный кронштейн» строка синтаксиса Lua в
Символьные строки может также определяется с использованием длинного формата, заключенного в длинные скобки. Мы определяем открытую длинную скобку уровня n в виде квадратного кронштейна открытия, за которым следуют n равнозначных знаков, за которым следует другая квадратная скобка открытия. Таким образом, открывающая длинная скобка уровня 0 записывается как [[, открывающая длинная скобка уровня 1 записывается как [= [и т. Д.]. Аналогичным образом определяется закрывающая длинная скобка; например, закрывающая длинная скобка уровня 4 записывается как] ====]. Длинная строка начинается с открытой длинной скобки любого уровня и заканчивается на первом закрывающем длинном кронштейне того же уровня. Литералы в этой скобке могут работать для нескольких строк, не интерпретировать никакие escape-последовательности и игнорировать длинные скобки любого другого уровня. Они могут содержать что угодно, кроме закрывающей скобки соответствующего уровня.
Вкратце, я пытаюсь создать регулярное выражение, которое будет соответствовать открытому длинному кронштейну, содержанию строки между ними и закрывающей длинной скобке. Совпадение должно происходить только тогда, когда длинный кронштейн открытия и закрывающий длинный кронштейн имеют одинаковое количество одинаковых знаков, которые могут быть равны нулю или больше.
Это недействительное регулярное выражение JFlex, или, по крайней мере, это не значит, что ответ говорит в JFlex. '\ 1' не имеет особого значения в JFlex и просто сопоставляется с символом' 1'. – lsf37