将一个字符串拆分为表格。

我现在正在使用这个函数:

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','/' ) )

但那也不行。:(

有没有其他更简单的方法来创建表呢?

原文链接 https://stackoverflow.com/questions/9822795

点赞
stackoverflow用户513763
stackoverflow用户513763

为什么不直接匹配非空格字符而匹配其他字符呢?

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 手册中的模式

2012-03-22 13:33:14
stackoverflow用户837856
stackoverflow用户837856

如果您要使用更高级的结构,则建议使用 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
2012-03-23 02:22:41