You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lua正则匹配错误:如何捕获(\aHEX)标记及含初始无标记的对应文本

Lua字符串匹配:捕获无标记前缀、(\aHEX)标记及对应文本

问题描述

需要匹配包含(\aHEX)颜色标记的字符串,循环捕获三类内容:

  1. 初始无标记内容(如示例中的"Default"),对应标记为空字符串
  2. \a开头加8位十六进制的颜色标记(如\aFFFFFFFF)
  3. 标记对应的后续文本(如"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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 19:05:25