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

时间:2018-11-18 16:21:30

标签: regex lua gsub

与该字符串相似的字符串:

|cff00ccffkey:|r value

我需要除去| cff00ccff和| r才能得到:

key: value

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

如何在Lua中做到这一点?我尝试过:

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

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

谢谢。

1 个答案:

答案 0 :(得分:2)

Lua模式do not support范围/间隔/限制量词。

您可以重复%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 demo online

如果您构建('%w'):.rep(8)之类的模式,也可以使其更具动态性:

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

请参见another Lua demo

如果您的字符串始终遵循此模式-|c<8alpnum_chars><text>|r<value>-您也可以使用类似的模式

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

请参见this Lua demo

此处,模式匹配:

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

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