2012-03-22 4 views
1

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

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

Теперь строка может иметь любой характер в нем (как видно из функции выше). Я хочу разбить строку на слова, обнаруживающие только белые пробелы и никакой другой символ. Я видел решение, упомянутое here, но оно не помогает мне даже на codepad.org (link). Я работаю в 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) 

См. также: Patterns in the Lua Manual также имейте в виде Lua ра tterns не совпадают с регулярными выражениями, они светлее, но имеют свои ограничения.

1

Если вы будете работать с более продвинутыми структурами, я рекомендую 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 

 Смежные вопросы

  • Нет связанных вопросов^_^