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