9

明らかにフルパスでファイル名を構築している 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 行目で何が起こるか?

4

1 に答える 1

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

このパターンは、0 個以上の英数字以外の文字 (空白など) で始まり、1 つ以上の英数字とアンダースコア (おそらくファイル名)、ピリオド、および文字列 "tex" が続き、その後に終了する任意の文字列に一致します。後で使用するために、ファイル名 + ".tex" をキャプチャします。基本的には、最初にジャンク文字 (空白) が含まれている可能性のあるファイル名を取得し、それをクリーンなバージョンに置き換えてから、出力ディレクトリを先頭に追加します。

おそらく混乱を引き起こしているのは、.どの文字にも一致するということです。しかし、-「次の一致の前のゼロ個以上の文字の最短文字列」を意味する終了によって変更されると、つまり、貪欲でない検索になります。[%w_]文字列の先頭から、複合語(英数字またはアンダースコア)に一致する文字が見つかるまで、見つかったすべての文字に一致します。

于 2011-04-15T17:27:45.430 に答える