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

标签 regex lua gsub

来自与此字符串相似的字符串:

|cff00ccffkey:|r值

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

键:值

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

我怎样才能在Lua中做到这一点?我尝试过:

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

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

谢谢。

最佳答案

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引用捕获到相应组中的值。

关于regex - Lua gsub - 如何在正则表达式模式中设置最大字符限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53362991/

相关文章:

regex - 在R中隔离字符串的一部分

awk - 使用 awk 从字段中删除空格

SQL Server : Select rows with multiple occurrences of regex match in a column

lua - 在 Lua 中创建表的调试钩子(Hook)

java - 正则表达式排除字符不起作用

javascript - 执行 javascript 代码以接受条款并打开下一页

nginx lua-resty-http 无路由到主机错误

Ruby .gsub 如何缩短进行类似替换的代码行

python - 正则表达式捕捉网址

javascript - 验证正则表达式