我正在盯着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行会发生什么?
最佳答案
h = options.output_dir .. string.gsub (h, "^.-([%w_]+%.tex)$", "%1")
该模式匹配任何以零个或多个非字母数字字符(即空格等)开头的字符串,然后是一个或多个字母数字字符和下划线(可能是文件名),句点以及随后以字符串“tex”结尾的字符串。它捕获文件名+“.tex”以供以后使用。基本上,它的文件名开头带有可能的垃圾字符(空格),然后将其替换为纯净版本,然后再将输出目录添加到文件开头。
现在,可能引起您困惑的是
.
与任何字符匹配。但是,当用终止的-
修改时,意味着“下一个匹配项之前的零个或多个字符的最短字符串”,即非贪婪搜索。它会匹配从字符串开头找到的所有字符,直到找到与复合[%w_]
匹配的内容-字母数字或下划线。
关于regex - 我不明白的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680105/