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

时间:2016-11-21 16:43:24

标签: 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地址的逻辑问题在于,当我测试地址如&#34; 1.2.3.4.5&#34;时,变量&#34; chunks&#34;仍然评估为4。 如何才能更改此模式,以便仅在恰好有四个八位字节时才能通过?

感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用锚点模式^$,这意味着&#34;匹配字符串的开头&#34; &#34;匹配字符串结束&#34;分别在模式的开头/结尾处要求匹配捕获整个字符串:

local chunks = {ip:match("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")}