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

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

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

验证IPv4地址时,这个逻辑存在一个问题,就是当测试地址像“1.2.3.4.5”时,变量“chunks”仍然计算为4个。如何更改此模式以仅在恰好有四个八位字节时通过?

谢谢。

点赞
用户2616735
用户2616735

你可以在模式的开头/结尾使用锚定模式 ^$ 来表示 "匹配字符串的开头" 和 "匹配字符串的结尾",以便要求匹配捕获整个串:

local chunks = {ip:match("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")}
2016-11-21 16:48:35