Делаем шаблон Lua нечувствительным к регистру с помощью LPeg

У меня есть приложение, которое (среди прочего) поддерживает поиск по простому тексту и поиск с использованием шаблонов Lua. Для удобства приложение поддерживает поиск без учета регистра. Вот фрагмент изображения:

(

Код, который преобразует данный шаблон Lua в шаблон Lua без учета регистра, не слишком красив. В основном он беспокоится о том, предшествует ли символу нечетное или четное количество escape-последовательности (%) и находится ли он внутри квадратных скобок. Шаблон, показанный на изображении, становится %a[bB][bB]%%[cC][%abB%%cC]

У меня еще не было возможности изучить LPeg, и я полагаю, что это может быть моим мотиватором.

Мой вопрос в том, легко ли с этим справился бы LPeg?


person Stomp    schedule 15.11.2012    source источник


Ответы (1)


Да, но для более легкого входа в мир LPeg рассмотрите модуль «re» LPeg, который дает вам синтаксис, подобный регулярному выражению, и в котором вы можете указать набор правил, как в грамматике (например, Yacc и т. д.). Вы бы в основном написали правила для экранированных символов, групп квадратных скобок и обычных символов. Затем вы можете связать функции с правилами, которые будут генерировать либо тот же текст, который они использовали в качестве ввода, либо модифицированную версию без учета регистра.

Структура ваших правил автоматически позаботится о различиях между четными и нечетными, контексте скобок и т. д. LPeg использует «упорядоченный выбор», поэтому, если вы сначала добавите свое правило выхода, оно будет правильно обрабатывать %[ и не смешивать его с правило скобок, например.

person Hisham H M    schedule 16.11.2012
comment
Спасибо! Я не думал просто использовать RE, это намного упрощает :) - person Stomp; 16.11.2012