问题
From strings that are similar to this string:
|cff00ccffkey:|r value
I need to remove |cff00ccff and |r to get:
key: value
The problem is that |cff00ccff
is a color code. I know it always starts with |c
but the next 8 characters could be anything. So I need a gsub pattern to get the next 8 characters (alpha-numeric only) after |c
.
How can I do this in Lua? I have tried:
local newString = string.gsub("|cff00ccffkey:|r value", "|c%w*", "")
newString = string.gsub(newString, "|r", "")
but that will remove everything up to the first white-space and I don't know how to specify the max characters to select to avoid this.
Thank you.
回答1:
Lua patterns do not support range/interval/limiting quantifiers.
You may repeat %w
alphanumeric pattern eight times:
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
See the Lua demo online.
You may also make it a bit more dynamic if you build the pattern like ('%w'):.rep(8)
:
local newString = string.gsub("|cff00ccffkey:|r value", "|c" ..('%w'):rep(8), "")
See another Lua demo.
If your strings always follow this pattern - |c<8alpnum_chars><text>|r<value>
- you may also use a pattern like
local newString = string.gsub("|cff00ccffkey:|r value", "^|c" ..('%w'):rep(8) .. "(.-)|r(.*)", "%1%2")
See this Lua demo
Here, the pattern matches:
^
- start of string|c
- a literal|c
" ..('%w'):rep(8) .. "
- 8 alphanumeric chars(.-)
- Group 1: any 0+ chars, as few as possible|r
- a|r
substring(.*)
- Group 2: the rest of the string.
The %1
and %2
refer to the values captured into corresponding groups.
来源:https://stackoverflow.com/questions/53362991/lua-gsub-how-to-set-max-character-limit-in-regex-pattern