我正在主演这些来自luadoc的少量(稍微修改过的)线路,这些线路显然是使用完整路径构建文件名。但我根本不明白第5行会发生什么。
参数filename
可能类似于“myfile.lua”。
function out_file (filename)
local h = filename
h = string.gsub(h, "lua$", "tex")
h = string.gsub(h, "luadoc$", "tex")
h = options.output_dir .. string.gsub (h, "^.-([%w_]+%.tex)$", "%1")
return h
end
第5行会发生什么?
答案 0 :(得分:14)
h = options.output_dir .. string.gsub (h, "^.-([%w_]+%.tex)$", "%1")
模式匹配任何以零个或多个非字母数字字符(即空格等)开头的字符串,后跟一个或多个字母数字字符和下划线(可能是文件名),句点和字符串“tex”然后结束。它捕获文件名+“。tex”供以后使用。基本上,它在开头使用带有可能的垃圾字符(空白)的文件名,并在将输出目录添加到其前面之前将其替换为干净版本。
现在可能会让你感到困惑的是,.
匹配任何角色。但是当被终止-
修改时,意味着“在下一次匹配之前最短的零个或多个字符串” - 即非贪婪的搜索。它将匹配从字符串开头找到的任何字符,直到找到与化合物[%w_]
匹配的字符 - 字母数字或下划线。