Вопрос

Можно ли достичь в Луа?

local noSlashEnding = string.gsub("slash\\ending\\string\\", "\\|/$", "")
-- noSlashEnding should contain "slash\\ending\\string"

local noSlashEnding2 = string.gsub("slash/ending/string/", "\\|/$", "")
-- noSlashEnding2 should contain "slash/ending/string"

Точка здесь - это не принятие логических или «или» заявлений в образцах LUA.


Редактировать: только что понял, что возможно, делая это:

strng.gsub("slash\\ending\\string\\", "[\\,/]$", "")

Хотя логические «или» для шаблонов все еще отсутствуют.

Это было полезно?

Решение

Lua не использует стандартные регулярные выражения для сопоставления с рисунком. Цитата из книги Программирование в Луа объясняет причину:

В отличие от нескольких других языков сценариев, LUA не использует регулярные выражения POSIX (REGEXP) для сопоставления шаблона. Основная причина этого - это размер: типичная реализация POSIX Regexp занимает более 4000 строк кода. Это больше, чем все стандартные библиотеки LUA вместе. Для сравнения, реализация сопоставления сроков в LUA имеет менее 500 строк. Конечно, сопоставление картины в LUA не может сделать все, что делает полную реализацию POSIX. Тем не менее, сопоставление шаблона в LUA является мощным инструментом и включает в себя некоторые функции, которые трудно сопоставить со стандартными реализациями POSIX.

Тем не менее, есть много привязки к существующим библиотекам регулярных выражений, а также продвинутыми Lepeg библиотека. Для списка их со ссылками см. http://lua-users.org/wiki/librariesandbindings., глава Text processing.

Также см. Этот вопрос: LUA образец сопоставления против регулярных выражений

Другие советы

Луа сопоставление картины не совпадает с регулярными выражениями, и не имеет концепции чередования.

Например, если вы хотели удалить "abc" или "efg" с конца строки (похоже на "(abc|efg)$" Регулярное выражение) Следующий код будет работать хорошо:

local inputstring="123efgabc"
local s,n = inputstring:gsub("abc$", "")
if n == 0 then
  s,n = inputstring:gsub("efg$", "")
end
print(s) --> 123efg

Lua регулярные выражения ... ненормально. Насколько я могу сказать из документации, нет поддержки общего чередования, ни для применения операторов повторения к группам. В вашем случае, как вы говорите, вы можете получить то, что вы хотите с классом персонажа (я не уверен, что запятая делает в своем классе персонажа).

Посмотреть здесь: http://www.lua.org/manual/5.1/manual.html#5.4.1

(В проекте я работал для работы, мы написали наши собственные обязательства LUA для PCRE из-за этого.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top