Lua-gsub-如何在正则表达式模式中设置最大字符限制



类似的字符串到此字符串:

|cff00ccffkey:|r value

我需要删除|cff00ccff和|r才能获得:

key: value

问题是|cff00ccff是一个颜色代码。我知道它总是以|c开头,但接下来的8个字符可以是任何字符。因此,我需要一个gsub模式来获取|c之后的接下来8个字符(仅限字母数字(。

在卢阿我该怎么做?我试过:

local newString = string.gsub("|cff00ccffkey:|r value", "|c%w*", "")
newString = string.gsub(newString, "|r", "")

但这将删除直到第一个空白的所有内容,我不知道如何指定要选择的最大字符来避免这种情况。

谢谢。

Lua模式不支持范围/区间/限制量词。

您可以重复%w字母数字模式八次:

local newString = string.gsub("|cff00ccffkey:|r value", "|c%w%w%w%w%w%w%w%w", "")
newString = string.gsub(newString, "|r", "")
print(newString)
-- => key: value

在线查看Lua演示。

如果您构建像('%w'):.rep(8):这样的模式,您也可以使其更加动态

local newString = string.gsub("|cff00ccffkey:|r value", "|c" ..('%w'):rep(8), "")

请参阅另一个Lua演示。

如果你的字符串总是遵循这个模式——|c<8alpnum_chars><text>|r<value>——你也可以使用类似的模式

local newString = string.gsub("|cff00ccffkey:|r value", "^|c" ..('%w'):rep(8) .. "(.-)|r(.*)", "%1%2")

看这个Lua演示

在这里,模式匹配:

  • ^-字符串的开头
  • |c-文字|c
  • " ..('%w'):rep(8) .. "-8个字母数字字符
  • (.-)-组1:任何0+个字符,尽可能少
  • |r-一个|r子串
  • (.*)-第2组:字符串的其余部分

%1%2是指捕获到相应组中的值。

最新更新