如何指定lua模式匹配尝试中的迭代次数?

如何指定lua模式匹配尝试中的迭代次数?,lua,Lua,我有以下lua代码:(基于stackoverflow上的另一篇文章) localchunks={ip:match((%d+)%。(%d+)%。(%d+)。(%d+)。(%d+)。(%d+)} 如果(#chunks==4),那么 对于v,成对(块)do 如果(色调数(v)255),则 返回错误 结束 结束 返回真值 其他的 返回错误 结束 验证IPv4地址的这种逻辑的问题在于,当我测试地址(如“1.2.3.4.5”)时,变量“chunks”的计算结果仍然是4。 我怎样才能改变这个模式,使它只在正

我有以下lua代码:(基于stackoverflow上的另一篇文章)

localchunks={ip:match((%d+)%。(%d+)%。(%d+)。(%d+)。(%d+)。(%d+)}
如果(#chunks==4),那么
对于v,成对(块)do
如果(色调数(v)<0或色调数(v)>255),则
返回错误
结束
结束
返回真值
其他的
返回错误
结束
验证IPv4地址的这种逻辑的问题在于,当我测试地址(如“1.2.3.4.5”)时,变量“chunks”的计算结果仍然是4。 我怎样才能改变这个模式,使它只在正好有四个八位组时通过


谢谢

您可以使用锚定模式
^
$
,在模式的开头/结尾分别表示“字符串开头匹配”和“字符串结尾匹配”,以要求匹配捕获整个字符串:

local chunks = {ip:match("(%d+)%.(%d+)%.(%d+)%.(%d+)")}
if (#chunks == 4) then
    for _,v in pairs(chunks) do
        if (tonumber(v) < 0 or tonumber(v) > 255) then
            return false
        end
    end
    return true
else
    return false
end
local chunks = {ip:match("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")}