一个我不理解的正则表达式

在第5行发生了什么?

原文链接 https://stackoverflow.com/questions/5680105

点赞
stackoverflow用户282658
stackoverflow用户282658
h = options.output_dir .. string.gsub(h, "^.-([%w_]+%.tex)$", "%1")

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

现在你可能困惑的原因是“。”匹配任何字符。但是,当由终止符“-”修改时,它的意思是“在下一个匹配项之前的零个或多个字符中最短的字符串”——即非贪婪搜索。它将匹配从字符串开头找到的任何字符,直到找到与复合[%w_](字母数字或下划线)匹配的内容。

2011-04-15 17:27:45