一个正则表达式,我不明白

时间:2011-04-15 17:09:13

标签: regex lua lua-patterns luadoc

我正在主演这些来自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行会发生什么?

1 个答案:

答案 0 :(得分:14)

h = options.output_dir .. string.gsub (h, "^.-([%w_]+%.tex)$", "%1")

模式匹配任何以零个或多个非字母数字字符(即空格等)开头的字符串,后跟一个或多个字母数字字符和下划线(可能是文件名),句点和字符串“tex”然后结束。它捕获文件名+“。tex”供以后使用。基本上,它在开头使用带有可能的垃圾字符(空白)的文件名,并在将输出目录添加到其前面之前将其替换为干净版本。

现在可能会让你感到困惑的是,.匹配任何角色。但是当被终止-修改时,意味着“在下一次匹配之前最短的零个或多个字符串” - 即非贪婪的搜索。它将匹配从字符串开头找到的任何字符,直到找到与化合物[%w_]匹配的字符 - 字母数字或下划线。