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

主要用到string.match

Lua 复制代码
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` 是颜色代码。

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

Lua 复制代码
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` 的例子,它会迭代所有匹配的颜色标签:

Lua 复制代码
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`。

相关推荐
unix2linux1 天前
YOLO v5 Series - Image & Video Storage ( Openresty + Lua)
yolo·lua·openresty
最后一个bug1 天前
如何理解Lua 使用虚拟堆栈
linux·c语言·开发语言·嵌入式硬件·lua
半夏知半秋3 天前
lua-lru缓存算法解析
笔记·学习·算法·缓存·lua
最后一个bug3 天前
C语言执行Lua进行错误处理
linux·服务器·c语言·开发语言·嵌入式硬件·lua
袁庭新3 天前
Lua如何连接MySQL数据库?
redis·mysql·lua·lua5.4·袁庭新
红黑色的圣西罗3 天前
Lua 实现继承的一种方式
开发语言·lua
weixin_428498495 天前
Lua资料
开发语言·lua
Clown955 天前
go-zero(四) 错误处理(统一响应信息)
开发语言·golang·lua
半夏知半秋5 天前
lua实现雪花算法
开发语言·笔记·算法·lua
最后一个bug6 天前
lua调用C语言函数,在函数中进行类型检查
linux·c语言·开发语言·lua