数字和正则表达式
tonumber and regex
给出的是一个(时间值)字符串,如:
local dt = "12:34:56"
我想把这个字符串剪成
hh, mm, ss = "12", "34", "56"
因此我这样使用正则表达式:
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("..:..:","") ))
效果很好。
(时间字符串来自用户输入,所以如果用户输入“1”而不是“01”,我用 0 填充它)
但是在值以 0 开头的情况下,它超出了 luas tonumber() 的范围(我猜是带符号的零),与“1”一样,tonumber() 似乎无法处理低于“2”的值")
谁能告诉我如何处理这种情况?
除此之外,如果你能告诉我正则表达式中的错误做法,我会很高兴,如果有的话。
整个事情可以缩短到这一行:
local hh, mm, ss = dt:match "(%d%d?):(%d%d?):(%d%d?)"
至于你的tonumber
出现的错误,是因为gsub
returns 2个值在它的运算之后。第一个是替换的字符串,第二个是数字。 tonumber
假设第二个参数是提供的基数(我认为是 1)。由于以 1 为底数的数字只能是 0
;它会引发错误。
给出的是一个(时间值)字符串,如:
local dt = "12:34:56"
我想把这个字符串剪成
hh, mm, ss = "12", "34", "56"
因此我这样使用正则表达式:
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("..:..:","") ))
效果很好。 (时间字符串来自用户输入,所以如果用户输入“1”而不是“01”,我用 0 填充它)
但是在值以 0 开头的情况下,它超出了 luas tonumber() 的范围(我猜是带符号的零),与“1”一样,tonumber() 似乎无法处理低于“2”的值") 谁能告诉我如何处理这种情况?
除此之外,如果你能告诉我正则表达式中的错误做法,我会很高兴,如果有的话。
整个事情可以缩短到这一行:
local hh, mm, ss = dt:match "(%d%d?):(%d%d?):(%d%d?)"
至于你的tonumber
出现的错误,是因为gsub
returns 2个值在它的运算之后。第一个是替换的字符串,第二个是数字。 tonumber
假设第二个参数是提供的基数(我认为是 1)。由于以 1 为底数的数字只能是 0
;它会引发错误。