目前,我正在使用此功能:
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','/' ) )
也是,但这也不起作用。 :(
还有其他更简单的方法来创建表吗?
答案 0 :(得分: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模式与正则表达式不同,它们更轻,但有其局限性。
答案 1 :(得分: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