Разбить строку на стол

В настоящее время я использую эту функцию:

function tokenize( str )
  local ret = {}
  string.gsub( str, "([-%w%p()%[%]®+]+)", function( s ) table.insert( ret, s ) end )
  return ret
end

Теперь строка может содержать любой символ (как видно из функции выше). Я хочу разбить строку на слова, определяющие только пробелы и никаких других символов. Я видел упомянутое здесь решение, но оно не помогает мне даже на codepad.org ( ссылка). Я работаю в PtokaX, если вам интересно. Я пытался использовать

print( split( 'foo/bar/baz/test','/' ) )

тоже, но это тоже не работает.:(

Есть ли еще какой-нибудь более простой способ создать таблицу?

2 ответа

Решение

Почему вы просто не подходите для непробельных символов, а не для всех остальных?

function tokenize( str )
  local ret = {}
  string.gsub( str, "(%S+)", function( s ) table.insert( ret, s ) end )
  return ret
end

Если вы хотите использовать другие символы для разделения, отрицание набора шаблонов также полезно:

s='foo#bar!baz*'
s:gsub('([^#!%*]+)',function(s) print(s) end)

Смотрите также: Шаблоны в Lua Manual. Также имейте в виду, что шаблоны Lua не совпадают с регулярными выражениями, они легче, но имеют свои ограничения.

Если вы будете работать с более продвинутыми структурами, я рекомендую LPeg.

require"lpeg"
lpeg.locale(lpeg)

local pattern = lpeg.P(
    lpeg.Ct(
        (lpeg.space^0*lpeg.C(-lpeg.space)^1)^0
    )
)

local ret = lpeg.match(pattern, str)

for k,v in ipairs(ret) do
    print(k, v)
end
Другие вопросы по тегам