Tabs detab在Lua中是如何工作的 --将制表符转换为空格 函数detab(文本) 本地制表符宽度=4 本地功能代表(匹配) 局部空间=-match:len() 打印(“匹配:“…匹配”) 而空格
来回答奖金问题: 制表符与制表符对齐。制表符由八个字符组成。第一个选项卡从第六列开始,因此需要填充三个空格。第二个选项卡从第16列开始,因此它只需要一个空格宽 当空格变为正数时,循环停止,因为循环一直以“缩进”增量添加空格,直到有足够的空格比匹配的文本长。然后,当它将该数量的空格与匹配的文本组合在一起时,它就构造了一个字符串,该字符串被填充到正确的制表位Tabs detab在Lua中是如何工作的 --将制表符转换为空格 函数detab(文本) 本地制表符宽度=4 本地功能代表(匹配) 局部空间=-match:len() 打印(“匹配:“…匹配”) 而空格,tabs,lua,spaces,Tabs,Lua,Spaces,来回答奖金问题: 制表符与制表符对齐。制表符由八个字符组成。第一个选项卡从第六列开始,因此需要填充三个空格。第二个选项卡从第16列开始,因此它只需要一个空格宽 当空格变为正数时,循环停止,因为循环一直以“缩进”增量添加空格,直到有足够的空格比匹配的文本长。然后,当它将该数量的空格与匹配的文本组合在一起时,它就构造了一个字符串,该字符串被填充到正确的制表位 这也是gsub不同的原因。gsub没有将制表符视为制表符,而是将其视为四个空格。因此,第二个制表符没有填充到制表位,而是扩展到四个空格。要回答
这也是gsub不同的原因。gsub没有将制表符视为制表符,而是将其视为四个空格。因此,第二个制表符没有填充到制表位,而是扩展到四个空格。要回答额外的问题: 制表符与制表符对齐。制表符由八个字符组成。第一个选项卡从第六列开始,因此需要填充三个空格。第二个选项卡从第16列开始,因此它只需要一个空格宽 当空格变为正数时,循环停止,因为循环一直以“缩进”增量添加空格,直到有足够的空格比匹配的文本长。然后,当它将该数量的空格与匹配的文本组合在一起时,它就构造了一个字符串,该字符串被填充到正确的制表位
这也是gsub不同的原因。gsub没有将制表符视为制表符,而是将其视为四个空格。因此,第二个制表符没有填充到制表位,而是扩展到四个空格。通过分析
rep
函数,它似乎就是这样做的。首先,它获取传入的匹配字符串的长度并将其设置为负值(例如,将其乘以-1)。在while循环中,它不断增加空间,直到它变为正
使用数字行可能更容易将其可视化:
-- Converts tabs to spaces
function detab(text)
local tab_width = 4
local function rep(match)
local spaces = -match:len()
print("match:"..match)
while spaces<1 do spaces = spaces + tab_width end
print("Found "..spaces.." spaces")
return match .. string.rep(" ", spaces)
end
text = text:gsub("([^\n]-)\t", rep)
return text
end
str=' thisisa string'
--thiis is a string
print("length: "..str:len())
print(detab(str))
print(str:gsub("\t"," "))
这不同于outterstr:gsub(“\t”,”)
不加区别地用4个空格替换所有制表符。在detab
函数中,替换制表符的空格数取决于匹配捕获的长度
local function rep(match)
local spaces = tab_width - match:len() % tab_width
return match .. string.rep(" ", spaces)
end
通过分析
rep
函数,它似乎就是这样做的。首先,它获取传入的匹配字符串的长度并将其设置为负值(例如,将其乘以-1)。在while循环中,它不断增加空间,直到它变为正
使用数字行可能更容易将其可视化:
-- Converts tabs to spaces
function detab(text)
local tab_width = 4
local function rep(match)
local spaces = -match:len()
print("match:"..match)
while spaces<1 do spaces = spaces + tab_width end
print("Found "..spaces.." spaces")
return match .. string.rep(" ", spaces)
end
text = text:gsub("([^\n]-)\t", rep)
return text
end
str=' thisisa string'
--thiis is a string
print("length: "..str:len())
print(detab(str))
print(str:gsub("\t"," "))
这不同于outterstr:gsub(“\t”,”)
不加区别地用4个空格替换所有制表符。在detab
函数中,替换制表符的空格数取决于匹配捕获的长度
local function rep(match)
local spaces = tab_width - match:len() % tab_width
return match .. string.rep(" ", spaces)
end
函数中
rep(匹配)
计算的空格的等效形式无循环:local spaces=tab_width-#match%tab_width
函数中spaces
计算的等效形式rep(匹配)
没有循环:局部空格=制表符宽度-#匹配%tab\u宽度
你是指不加区分的吗?你是指不加区分的吗?