如何只在同一行中删除字符串中的注释?

我正在做一些工作,将从字符串中删除注释,但即使不在同一行上,也会将所有注释完全删除。

这是我的代码

local s = [==[
local a = true -- sup
local b = false -- [[ sup ]]
]==]

print((s:gsub("%-%-(.+)", "")))

由于使用了 (.+), 它会删除第一行后的所有内容。所以有没有办法只删除同一行上的注释呢?

点赞
用户9383219
用户9383219

你可以在模式中使用 [^\n] 来匹配非换行符的字符。括号也可以被移除,因为你不会在替换字符串中使用捕获 %1

local s = [==[
local a = true -- sup
local b = false -- [[ sup ]]
]==]

print((s:gsub("%-%-[^\n\r]+", "")))
2019-08-19 05:11:16
用户11226352
用户11226352

如果一行以--结尾,则不会被[^\n\r]+所匹配,所以应该是[^\n\r]*。另外,在评论标记之前删除(尾随的)空格可能是一个好习惯,除非它们被用例所需要。

local s = [==[
local a = true -- sup
local b = false -- [[ sup ]]
]==]

print((s:gsub("[ \t]*%-%-[^\n\r]*", "")))
2019-08-19 10:58:53