Разделить строку в Lua?

Чтобы быть эффективной, функция должна быть детерминированной, т. е. выход должен быть только в зависимости от входа, так что результат может быть кэширован.

Если вы хотите вызвать хранимую процедуру из функции, вам нужно специально сделать функцию недетерминированной.

145
задан dda 22 March 2016 в 17:03
поделиться

3 ответа

Если вы разделяете строку в Lua, вам следует попробовать методы string.gmatch () или string.sub () . Используйте метод string.sub (), если вы знаете индекс, по которому вы хотите разделить строку, или используйте string.gmatch (), если вы будете анализировать строку, чтобы найти место для разделения строки.

Пример использования string.gmatch () из Справочное руководство Lua 5.1 :

 t = {}
 s = "from=world, to=Lua"
 for k, v in string.gmatch(s, "(%w+)=(%w+)") do
   t[k] = v
 end
32
ответ дан 23 November 2019 в 22:20
поделиться

Вот функция:

function split(pString, pPattern)
   local Table = {}  -- NOTE: use {n = 0} in Lua-5.0
   local fpat = "(.-)" .. pPattern
   local last_end = 1
   local s, e, cap = pString:find(fpat, 1)
   while s do
      if s ~= 1 or cap ~= "" then
     table.insert(Table,cap)
      end
      last_end = e+1
      s, e, cap = pString:find(fpat, last_end)
   end
   if last_end <= #pString then
      cap = pString:sub(last_end)
      table.insert(Table, cap)
   end
   return Table
end

Назовите ее так:

list=split(string_to_split,pattern_to_match)

например:

list=split("1:2:3:4","\:")


Чтобы узнать больше, перейдите сюда:
http://lua-users.org/wiki/SplitJoin

11
ответ дан 23 November 2019 в 22:20
поделиться

Так же, как string.gmatch найдет паттернов в строке, эта функция найдет вещи между паттернами:

function string:split(pat)
  pat = pat or '%s+'
  local st, g = 1, self:gmatch("()("..pat..")")
  local function getter(segs, seps, sep, cap1, ...)
    st = sep and seps + #sep
    return self:sub(segs, (seps or 0) - 1), cap1 or sep, ...
  end
  return function() if st then return getter(st, g()) end end
end

По умолчанию возвращает все, что разделено пробелами.

14
ответ дан 23 November 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: