Lua:如何用空字符串替换两个或多个重复的 "?" 字符?

我尝试了下面的代码:

local str = "???"
string.gsub(str, "(??)*", "")

但是它删除了所有 '?' 字符。我想要单个 '?' 不被替换,而有多个 '?' 的则被替换成空字符串。

例如:

"?" = 不被替换
"??" = 被替换
"???" = 被替换

非常感谢任何帮助。

点赞
用户107090
用户107090

Lua模式中的问号是魔法符号:它们表示前一个类的0或1个实例。 Lua使用百分号字符“%”来转义模式中的魔法字符。

你的任务的正确模式是%?%?+,它表示一个实际的字符一次,后面跟着一个或多个实际的字符(请参见上面链接中的“+”修饰符)。

该代码

function test(s)
    print(s,s:gsub("%?%?+","-"))
end

for n=0,4 do
    test("["..string.rep("?",n).."]")
end

输出

[]      []      0
[?]     [?]     0
[??]    [-]     1
[???]   [-]     1
[????]  [-]     1

其中“-”显示更换的位置。

2018-07-13 04:25:03