Разбить строку на стол
В настоящее время я использую эту функцию:
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