Lua正则匹配错误:如何捕获(\aHEX)标记及含初始无标记的对应文本
Lua字符串匹配:捕获无标记前缀、(\aHEX)标记及对应文本
问题描述
需要匹配包含(\aHEX)颜色标记的字符串,循环捕获三类内容:
- 初始无标记内容(如示例中的"Default"),对应标记为空字符串
\a开头加8位十六进制的颜色标记(如\aFFFFFFFF)- 标记对应的后续文本(如"White text ")
原有正则仅捕获了带标记的部分,丢失了开头的无标记内容,以及标记后文本中的非单词字符(如示例里的" text")。
解决方案
调整正则表达式,同时覆盖开头无标记内容、颜色标记及对应文本的匹配,支持捕获空格、标点等非单词字符:
Lua 5.2+ 版本
local text = "Default \aFFFFFFFFWhite text \aFF0000FFJust red text" for k, v in string.gmatch(text, "(\\a%x{8}|)([^\\a]+)") do -- 将捕获到的nil转为空字符串,统一输出格式 k = k or "" print(string.format("标记:%s,内容:%s", k, v)) end
Lua 5.1 版本(不支持%x{8}写法)
local text = "Default \aFFFFFFFFWhite text \aFF0000FFJust red text" for k, v in string.gmatch(text, "(\\a%x%x%x%x%x%x%x%x|)([^\\a]+)") do k = k or "" print(string.format("标记:%s,内容:%s", k, v)) end
正则规则说明
(\\a%x{8}|):捕获颜色标记或空字符串\\a%x{8}:匹配\a后跟8位十六进制字符(对应颜色标记)|:分支匹配逻辑,当没有颜色标记时(比如开头的无标记内容),捕获空字符串
([^\\a]+):捕获所有非\a的字符,直到遇到下一个\a或字符串结尾,确保包含空格、标点等所有非标记内容
运行结果
标记:,内容:Default 标记:\aFFFFFFFF,内容:White text 标记:\aFF0000FF,内容:Just red text
内容的提问来源于stack exchange,提问作者qhouz
相关产品推荐
相关产品推荐

