gpt4 book ai didi

string - gsubbing 一个字符串,其模式包含 Lua 中的换行符

转载 作者:行者123 更新时间:2023-12-02 09:17:47 25 4
gpt4 key购买 nike

string.gsub 能否识别字符串中的换行符?我有一个场景,我试图将给定运算符指示的字符串的一部分从运算符的开头到换行符进行 gsub,如下所示:

local function removeComments(str, operator)
local new_Sc = (str):gsub(operator..".*\n", "");
return new_Sc;
end
local source = [[
int hi = 123; //a basic comment
char ok = "abc"; //another comment
]];
source = removeComments(source, "//");
print(source);

但是在输出中我看到它删除了第一个注释后的其余字符串文字:

int hi = 123; 

我尝试通过使用 string.char(10) 来使用文字换行符,如下 (str):gsub(operator..".*"..string.char(10 ), ""); 但是我仍然得到相同的输出;它会删除注释和字符串的其余部分,而不是注释的开头到换行符。

那么有没有办法 gsub 包含换行符的模式的字符串文字?

谢谢

最佳答案

您面临的问题类似于正则表达式中的贪婪匹配与惰性匹配(.* vs .*?)。

在 Lua 模式中,X.*\n 表示“匹配 X,然后匹配尽可能多的字符,后跟换行符”。 gsub 对换行符没有特殊处理,因此它将尝试继续匹配,直到最后 换行符,并替换尽可能多的字符。你希望匹配尽可能少的字符,这在 Lua 模式中用 .- 表示。

此外,我不确定它是否有意为之,但如果最后一行没有(正确)以换行符结束,则此策略不会删除最后一行的注释。我不确定它是否可以用单个模式表示,但此函数将从所有行中删除注释:

local function removeComments(str, operator)
local new_Sc = str:gsub(operator..".-\n", "\n");
new_Sc = new_Sc:gsub(operator.."[^\n].*$", "");
return new_Sc;
end

关于string - gsubbing 一个字符串,其模式包含 Lua 中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45448894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com