正则表达式为 Lua 模式

Regex as Lua pattern

我写了 (?<=;)[^\^]* 正则表达式,但我无法将其转换为在 Lua 中使用。我要改造

^#57df44;Cobblestone^white;

进入

Cobblestone

但如果字符串不包含任何颜色代码,则应返回 "as is"。

有人可以帮我解决这个问题吗?

使用捕获组:

local s = "^#57df44;Cobblestone^white;"
res = s:match(";([^^]*)") or s
print( res )
-- Cobblestone

参见Lua demo

这里,

  • ; - 匹配第一个 ;
  • ([^^]*) - 捕获组 1 将 ^ 以外的任何 0+ 个字符匹配到组 1

如果模式中定义了捕获组,string.match将只return捕获部分。

更多详情

如评论中所述,在当前情况下,您可能会使用 frontier pattern %f[^:] 而不是 (?<=:)

The frontier pattern %f followed by a set detects the transition from "not in set" to "in set".

但是,边界模式不能很好地替代正后视 (?<=:),因为后者可以处理模式的 序列 ,而边界模式仅适用与单个原子。因此,%f[^:] 表示 放在 : 和非 : 之间的字符串中。但是,一旦您需要在 city= 之后匹配除 ^ 之外的任何 0+ 个字符,边界模式将是一个错误的结构。因此,它不像带有捕获组的 string.match 那样容易扩展。