Lua - 我对string.find有一点问题



我的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

返回: 零 零 零

有人可以帮我吗?

您需要调整模式以允许-

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

输出:

268

956

30

结果与第一个 char 上没有-相同,因为忽略-,因为模式不需要匹配第一个 Char。

您也可以通过调整模式将-包含在模式中

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

在这里,我们使用%转义-,然后通过使用?后词(匹配 0 或 1 次出现(来定义我们想要允许的数量。这将允许匹配适用于有效的数字,如30-30但不能--30,但由于模式仍未锚定到字符串的前面,仍然可以匹配第一个值的--30,但只返回-30。如果不需要,我们可以将^添加到 作为模式的第一个字符。

例:

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


Lua 模式资源:FHUG:了解 Lua 模式

相关内容

最新更新