首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串打断到表中

将字符串打断到表中
EN

Stack Overflow用户
提问于 2012-03-22 21:00:06
回答 2查看 215关注 0票数 1

目前,我正在使用这个函数:

代码语言:javascript
复制
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工作,如果你想知道的话。我试过使用

代码语言:javascript
复制
print( split( 'foo/bar/baz/test','/' ) )

也是,但这也不管用。:(

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-22 21:33:14

为什么不只匹配非空格字符,而匹配所有其他字符呢?

代码语言:javascript
复制
function tokenize( str )
  local ret = {}
  string.gsub( str, "(%S+)", function( s ) table.insert( ret, s ) end )
  return ret
end

如果要使用其他字符进行拆分,则模式集否定也很有用:

代码语言:javascript
复制
s='foo#bar!baz*'
s:gsub('([^#!%*]+)',function(s) print(s) end)

另请参阅:Patterns in the Lua Manual。还要记住,Lua模式与正则表达式不同,它们更轻,但有其局限性。

票数 2
EN

Stack Overflow用户

发布于 2012-03-23 10:22:42

如果您要使用更高级的结构,我推荐使用LPeg

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9822795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档