Lua-我对string.find有点问题

时间:2019-10-21 16:30:21

标签: lua

我的string.find出现问题,下面的代码可以正常工作:

local value = "268 956 30"

if value ~= nil then
    local _, _, a, b, c = string.find(value, '([%d%.]+) ([%d%.]+) ([%d%.]+)')

    print(a)
    print(b)
    print(c)
end
  

返回:   268   956   30

当变量包含减号(-)时,它将返回nil:

local value = "-268 -956 30"

if value ~= nil then
    local _, _, a, b, c = string.find(value, '([%d%.]+) ([%d%.]+) ([%d%.]+)')

    print(a)
    print(b)
    print(c)
end
  

返回:   零   零   零

有人可以帮我吗?

1 个答案:

答案 0 :(得分:3)

您需要调整模式以适应-

使用此值-268 956 30查看当前代码的结果

输出:

  

268

     

956

     

30

结果与第一个字符上没有-的结果相同,这是因为-被忽略了,因为不需要模式来匹配第一个字符。

您也可以通过调整模式来在样式中加入-

(%-?[%d%.]+) (%-?[%d%.]+) (%-?[%d%.]+)

在这里,我们使用-来对%进行转义,然后使用?后缀(匹配0或1个出现次数)来定义要允许的数量。这将使匹配项适用于有效的数字,例如30-30,但不能匹配--30,但是由于模式仍未锚定在字符串的开头,因此仍然可以匹配{{ 1}}作为第一个值,但仅返回--30。如果不希望这样,我们可以将-30添加到模式的第一个字符。

示例:

^

输出:

  

-268

     

-956

     

30


Lua模式资源:FHUG: Understanding Lua Patterns