Lua正则表达式(模式匹配规则)-提取颜色/

发布于:2024-10-11 ⋅ 阅读:(11) ⋅ 点赞:(0)

主要用到string.match

function _ExtractColorAndText(codeString)
    -- 定义一个模式来匹配颜色代码
    local pattern = "<color=(#?%x+)>(.-)</color>"
    local success, colorCode, text = pcall(string.match, codeString, pattern)
    if success and colorCode and text then
        log(colorCode,text)
        return colorCode, text
    else
        log("not find color code??",codeString)
        return nil, codeString -- 如果没有找到颜色代码,返回nil
    end
end

local str = "<color=#FF1414>联盟#敌方占领据点1</color>"
local color, text = _ExtractColorAndText(str)

print(color, text)

在Lua中,你提供的字符串 `local pattern = "<color=(#?%x+)>(.-)</color>"` 是一个用于匹配富文本中颜色标签的模式字符串,它遵循Lua的模式匹配规则,而不是正则表达式规则。这个模式用于搜索形如 `<color=#RRGGBB>文字</color>` 的文本,其中 `#RRGGBB` 是颜色代码。

让我们分解一下这个模式:

1. <color=:匹配文本中的 <color= 字符串。
2. (#?%x+):这是一个捕获组,匹配一个可选的 # 符号(#?),后面跟着一个或多个十六进制数字(%x+)。%x 在Lua模式匹配中表示一个十六进制数字(0-9, a-f, A-F)。
3. >:匹配关闭尖括号 >。
4. (.-):这是另一个捕获组,匹配任意字符(.),尽可能少的匹配次数(-),直到遇到下一个模式。
5. </color>:匹配结束的颜色标签 </color>。

要使用这个模式,你可以使用Lua的 `string.gmatch` 或 `string.match` 函数。这里是一个使用 `string.gmatch` 的例子,它会迭代所有匹配的颜色标签:

local text = "This is a <color=#FF0000>red</color> word and this is a <color=0000FF>blue</color> word."
local pattern = "<color=(#?%x+)>(.-)</color>"

for color, word in text:gmatch(pattern) do
    print("Color: " .. color .. ", Word: " .. word)
end

这段代码会打印出所有匹配的颜色值和对应的文本。注意,Lua的模式匹配不支持像正则表达式那样的复杂模式,所以它不如正则表达式那样强大和灵活。如果你需要更复杂的文本处理,可能需要使用支持正则表达式的库,比如Lua的 `lrexlib`。