Lua中string.match()正则需求:识别带前缀的可选正负数字
Lua string.match() 匹配!开头的可选数字解决方案
你的问题出在正则的逻辑和元字符使用上,先给你正确的正则表达式,再拆解问题:
正确正则
^!([-+]?%d*)
代码验证示例
local test_strs = {"!1", "!-2", "!+3", "!"} for _, s in ipairs(test_strs) do local res = string.match(s, "^!([-+]?%d*)") print(string.format("%q -> %q", s, res)) end
运行结果完全符合你的需求:
"!1" -> "1" "!-2" -> "-2" "!+3" -> "+3" "!" -> ""
原正则的问题
你写的!(^[-+]?%d+)有两个关键错误:
- 锚定符位置错误:
^是用来锚定整个字符串的开头,但你把它放在!后面,这会要求!之后的内容必须从字符串开头开始,逻辑完全矛盾。正确的做法是用^!锚定字符串开头的!。 - 数字匹配范围不对:
%d+要求至少匹配1个数字,无法处理!后面没有数字的情况,换成%d*才能匹配0个或多个数字,满足空字符串的需求。
正则逻辑拆解
^!:严格匹配字符串开头的!符号():捕获组,用来提取我们需要的数字部分(包括正负号)[-+]?:匹配可选的正负号,?表示该符号可以出现0次或1次%d*:匹配0个或多个数字,完美适配有数字和无数字的场景
内容的提问来源于stack exchange,提问作者DaveInDev
相关产品推荐
相关产品推荐

