如何编写可识别转义字符的Lua模式以提取路径分段?
解决Lua模式匹配带转义斜杠的路径问题
要处理包含转义斜杠\/的路径字符串(如/<\/>/b/c),同时支持各段可选,你需要修改模式,让它能区分未转义的/(作为分隔符)和转义的\/(作为普通字符)。
最终模式
local pattern = "^%/((\\/|[^/])*)%/((\\/|[^/])*)%/((\\/|[^/])*)$"
模式逻辑拆解
^%/:匹配字符串开头的分隔符/((\\/|[^/])*):每个捕获组的核心规则,匹配零个或多个字符,仅允许两种情况:\\/:转义后的斜杠(Lua字符串中需用\\转义\,因此模式里写为\\/)[^/]:非斜杠的普通字符
%/:匹配作为分隔符的未转义/$:匹配字符串结尾
测试示例
对于目标输入"/<\\/>/b/c"(注意Lua字符串中\需转义为\\),用string.match测试:
local input = "/<\\/>/b/c" local a, b, c = string.match(input, pattern) print(a) -- 输出: <\/> print(b) -- 输出: b print(c) -- 输出: c
对于空段输入"///",三个捕获组都会返回空字符串,符合可选要求。
原模式失效原因
你之前使用的^%/(.-)%/(.-)%/(.-)$中,.-是懒惰匹配,会在遇到第一个/时停止匹配,但它无法区分转义的\/和分隔用的/,因此会错误地把<\/>中的/当作分隔符,导致拆分结果不符合预期。
内容的提问来源于stack exchange,提问作者Peter R
相关产品推荐
相关产品推荐

