2013-07-26 5 views
5

Согласно the docs, все операторы повторения Lua работают только на отдельных персонажей, так что вы можете соответствоватьLua: сопоставление шаблонов с несколькими символами с? Оператор повторения

string.match('123', '1?(%d+)') -- returns 23 

, но не может соответствовать несколько символьных строк:

string.match('123', '(12)?(%d+)') -- want this to return 3 

документы говорят, что это возможно через «несколько шаблонов и пользовательская логика», но я не знаю, что это значит. Может ли кто-нибудь предложить способ сопоставить шаблон с указанным выше? В принципе, 12 должно быть необязательно сопоставлено все или ничего и возвращает оставшуюся часть строки цифр.

+1

Вы также можете попробовать LPeg или lrexlib – hjpotter92

ответ

5

Я думаю, что «несколько шаблонов и пользовательская логика» здесь означают использование так:

string.match('123', '12(%d+)') or string.match('123', '(%d+)') 

Поскольку or является коротким замыканием, если первая модель соответствует, это будет значением expresion, в противном случае второй шаблон попытается сопоставить. Это как раз средство regex (12)?(%d+).

Также обратите внимание, что есть более мощные LPeg или другие библиотеки регулярных выражений для Lua.