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

时间:2018-07-13 03:04:02

标签: regex lua

我尝试了以下操作:

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

但它会删除所有的'?'字符。我想要单曲“?”未被取代,但不止一个'?'替换为空字符串。

例如:

"?" = not replaced
"??" = replaced
"???" = replaced

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

问号在Lua模式中是神奇的:它们表示上一类的0 or 1 occurrence。 Lua以%字符的形式转义魔术字符。

正确的任务模式是%?%?+,这意味着一次实际的?字符,然后是一个或多个实际的?字符(请参见上面的链接)。

此代码

+

输出

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

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

其中[] [] 0 [?] [?] 0 [??] [-] 1 [???] [-] 1 [????] [-] 1 显示替换的位置。