regex - 我不明白的正则表达式

标签 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行会发生什么?

最佳答案

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

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

现在,可能引起您困惑的是.与任何字符匹配。但是,当用终止的-修改时,意味着“下一个匹配项之前的零个或多个字符的最短字符串”,即非贪婪搜索。它会匹配从字符串开头找到的所有字符,直到找到与复合[%w_]匹配的内容-字母数字或下划线。

关于regex - 我不明白的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680105/

相关文章:

REGEX 组合正则表达式字符串,然后查找除匹配项之外的所有内容

algorithm - 填表保存规则

lua - (Lua) 对非数值进行数学运算

使用复杂模式的字符串解析

string - 对于带有负号的数字,正确的模式是什么?

string - 如何在Lua中隔离由空格分隔的非英语单词?

javascript - Coderbyte 挑战 : Questions Marks - RegExp pattern '/d(\?\?\?)d/gi' incorect

python - 将单引号替换为双引号并排除某些元素

c - 当发生 Lua 错误时,使用 MINGW32 编译的 Lua 5.2 使我的主机程序崩溃

regex - 如何使用 perl 从字符串中提取电子邮件地址?