Сопоставить слово, не заключенное в кавычки в Lua

(Извините за мой ломаный английский)
Я пытаюсь сопоставить or в строке и, если он не заключен в одинарные кавычки, заменить его знаком минус (-). Например:

local input1 = "'condition1' or 'condition2'" 
input1:gsub(pattern, "-")  --> Should return "'condition1' - 'condition2'"

local input2 = "'condition1 or condition2'"  -- Note the position of the '
input2:gsub(pattern, "-")  --> Should return "'condition1 or condition2'"

Где pattern — это шаблон Lua, который я прошу.

Я уверен, что мне нужно использовать %b'', чтобы определить, заключен ли в кавычки or, поэтому я попробовал это как свой шаблон: [^%b'']or Но это не работает для меня.

Обратите внимание, что я могу использовать только чистые библиотеки Lua (поэтому никаких LPeg), так как код будет выполняться в разных средах выполнения Lua (все 5.2), не поддерживающих библиотеки C.

И обратите внимание, что этот вопрос не является дубликатом - нет вопроса, как сделать это в Lua с его собственными шаблонами.


person nickkoro    schedule 10.05.2017    source источник
comment
Используйте pattern = "(%b'')%s+or%s+(%b'')", а для замены используйте '%1 - %2'   -  person tonypdmtr    schedule 10.05.2017


Ответы (1)


Попробуйте input:gsub("('.-'.-)or","%1-").

Это предполагает, что or всегда появляется после строки в кавычках. Он захватывает все, начиная с строки в кавычках до or, и заменяет ее захваченным текстом, за которым следует -, как требуется.

person lhf    schedule 10.05.2017