我关注的是来自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行发生了什么?
发布于 2011-04-16 01:27:45
h = options.output_dir .. string.gsub (h, "^.-([%w_]+%.tex)$", "%1")该模式匹配以零个或多个非字母数字字符(即空格等)开头的任何字符串。后跟一个或多个字母数字字符和下划线(可能是文件名)、句点和字符串"tex“,然后结束。它捕获文件名+ ".tex“以供以后使用。基本上,它采用一个文件名开头可能包含垃圾字符(空格),并将其替换为干净的版本,然后将输出目录添加到文件名前面。
现在可能会让您感到困惑的是,.可以匹配任何字符。但是当被终止的-修改时,这意味着“在下一次匹配之前由零个或多个字符组成的最短字符串”--即非贪婪搜索。它将匹配从字符串开头找到的任何字符,直到找到与复合[%w_] -字母数字或下划线匹配的字符。
https://stackoverflow.com/questions/5680105
复制相似问题