Lua string.find无法找到一行中的最后一个单词

时间:2015-02-11 04:16:30

标签: string lua lua-patterns

这是Lua书籍编程中的一个案例。代码被遵循,我的问题是为什么它不能得到该行的最后一个字?

function allwords()
   local line=io.read()
   local pos=1
   return function ()
      while line do
         local s,e=string.find(line,"%w+ ",pos)
         if s then
            pos=e+1
            return string.sub(line,s,e)   
         else
            line=io.read()
            pos=1
         end
      end
      return nil
   end
end

for word in allwords() do
   print(word)
end

2 个答案:

答案 0 :(得分:4)

在这一行:

local s,e=string.find(line,"%w+ ",pos)
--                             ^

模式"%w+ "中有一个空格,因此它匹配一个单词后跟一个空格。输入时,例如word1 word2 word3并按 Enter word3后面没有空格。

本书的例子中没有空格:

local s, e = string.find(line, "%w+", pos)

答案 1 :(得分:0)

对不起,呃,"复活"这个问题,但我认为我有更好的解决方案。

您可以不执行此操作,而不是使用 allwords 功能:

for word in io.read():gmatch("%S+") do
   print(word)
end

功能

gmatch("%S+")

返回字符串中的所有单词。