Разбить строку на стол - PullRequest
1 голос
/ 22 марта 2012

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

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 ]

2 голосов
/ 22 марта 2012

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

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 . Также имейте в виду, что шаблоны Lua не совпадают с регулярными выражениями, они легче, но имеют свои ограничения.

1 голос
/ 23 марта 2012

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