Как мне написать регулярное выражение в Lua, эквивалентное / (\ (\))? $ / В js - PullRequest
3 голосов
/ 05 мая 2011

Я хочу написать регулярное выражение, эквивалентное следующему регулярному выражению Javascript:

/^(\(\))?$/ для соответствия "()" и ""

. Я не могу найти эквивалентное представление вLua.Проблема, с которой я столкнулся, заключалась в том, что я мог сделать несколько символов, за которыми следовал бы "?".

Например,

^%(%)$ можно использовать для совпадения "()"

^%(%)?$ может использоваться для сопоставления "(" и "()"

, но ^(%(%))?$ не работает.

Ответы [ 2 ]

3 голосов
/ 05 мая 2011

Как вы обнаружили, модификатор ? в языке шаблонов Lua применяется только к одному символьному классу. Вместо использования шаблонов / регулярных выражений, как насчет чего-то попроще: foo == '()' or foo == ''? Или ваша настоящая проблема более сложная? Если это так, пожалуйста, расскажите нам, что вы действительно пытаетесь сделать.

2 голосов
/ 05 мая 2011

Вы можете использовать LPeg (библиотека сопоставления с образцом для Lua).

local lpeg = require "lpeg"

-- this pattern is equivalent to regex: /^(\(\))?$/
-- which matches an empty string or open-close parens
local p = lpeg.P("()") ^ -1 * -1

-- p:match() returns the index of the first character 
-- after the match (or nil if no match)
print( p:match("()") )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...