吨和正则表达式

Sem*_*pie 2 regex lua numbers lua-patterns

给定是一个(时间 - 值)字符串,如:

local dt = "12:34:56"
Run Code Online (Sandbox Code Playgroud)

我想把这个字符串剪成

hh, mm, ss = "12", "34", "56"
Run Code Online (Sandbox Code Playgroud)

因此我使用这样的正则表达式:

local hh = string.format("%02d", tonumber( dt:gsub(":..:..","") ))
local mm = string.format("%02d", tonumber( dt:gsub(":..:",""):gsub(":","") ))
local ss = string.format("%02d", tonumber( dt:gsub("..:..:","") ))
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.(时间字符串来自userinput,所以如果用户写"1"而不是"01",我将其填充为0)

但是在值从0开始的情况下,它超出了luas tonumber()的范围(我猜是签名为零),与"1"相同,tonumber()似乎不能处理低于"2"的值.)任何人都可以告诉我该如何处理这种情况?

除此之外,如果你能告诉我正则表达式中的不良练习,我会很高兴,如果有的话.

hjp*_*r92 5

整个事情可以缩短到这一个班轮:

local hh, mm, ss = dt:match "(%d%d?):(%d%d?):(%d%d?)"
Run Code Online (Sandbox Code Playgroud)

至于你的错误tonumber,那是因为gsub它在操作后返回2个值.首先是替代的sring,第二个是数字.tonumber假设第二个参数是提供的基数(我认为这将是1).因为带有基数1的数字只能是0; 它引发了一个错误.