我主演的这些几个(稍微修改)的线路从luadoc显然构建一个完整路径的文件名.但是我根本不知道第5行会发生什么.
参数filename可以是“myfile.lua”.
参数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,"%1")
该模式匹配以零个或多个非字母数字字符(即空格等)开头的任何字符串,后跟一个或多个字母数字字符和下划线(可能是文件名),一段时间以及随后结束的字符串“tex”.它捕获文件名“.tex”供以后使用.基本上它在开头使用可能的垃圾字符(空格)的文件名,并用干净的版本替换它,然后将输出目录保存在前面.
现在可能会导致你的混淆呢.匹配任何字符但是当被终止修改时 – 意思是“在下一个匹配之前的零个或多个字符的最短字符串” – 即非贪婪搜索.它将匹配从字符串开头找到的任何字符,直到找到匹配化合物[%w_] – 字母数字或下划线的内容.