Lua中如何匹配字符串至最后一个数字出现的位置?
在Lua中匹配字符串至最后一个数字出现的位置
你当前使用的两种模式都无法得到预期的HJFverhs.1,原因如下:
.*(%d+):.*是贪婪匹配,会先吃掉字符串末尾的所有非数字内容,再回溯匹配最后一串数字,因此捕获组只会返回最后那串数字(这里是1),而非整个前缀。.*(%d)+:+作用在捕获组(%d)上,会重复捕获单个数字,但Lua的match函数对重复捕获组只会返回最后一次捕获的结果;你的场景中返回nil是因为模式逻辑冗余导致匹配异常。
要获取从字符串开头到最后一个数字的完整内容,可以使用以下两种方式:
方法1:直接匹配前缀到最后一个数字
local s = "HJFverhs.1.iufbgej" local result = s:match("^.*%d") print(result) -- 输出 HJFverhs.1
方法2:通过捕获组获取结果
local s = "HJFverhs.1.iufbgej" local result = s:match("^(.*%d)") print(result) -- 输出 HJFverhs.1
模式说明
^:锚定字符串开头,确保匹配从起始位置开始。.*:贪婪匹配任意字符(除换行符),直到遇到最后一个%d(数字)——因为.*的贪婪特性,它会尽可能向后匹配,直到无法满足后续的%d匹配,最终停在最后一个数字的位置,从而包含从开头到该数字的所有内容。
内容的提问来源于stack exchange,提问作者Gxg Bbg
相关产品推荐
相关产品推荐

