Регулярное выражение я не понимаю
Я играю главную роль в этих нескольких (слегка измененных) строках из 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 ответ
h = options.output_dir .. string.gsub (h, "^.-([%w_]+%.tex)$", "%1")
Шаблон соответствует любой строке, которая начинается с нуля или более не буквенно-цифровых символов (т. Е. Пробелов и т. Д.), За которыми следуют один или несколько буквенно-цифровых символов и подчеркиваний (возможно, имя файла), точка и строка "tex", которая затем заканчивается. Он захватывает имя файла + ".tex" для дальнейшего использования. По сути, он берет имя файла с возможными ненужными символами (пробелами) в начале и заменяет его чистой версией перед тем, как прикрепить выходной каталог к передней части.
Теперь, что, вероятно, вызывает у вас путаницу .
соответствует любому персонажу. Но когда модифицируется завершающим -
это означает "самая короткая строка из нуля или более символов перед следующим соответствием", то есть не жадный поиск. Он будет совпадать с любыми символами, найденными в начале строки, пока не найдет что-то, совпадающее с составным [%w_]
- буквенно-цифровой или подчеркивание.