正则表达式为 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
那样容易扩展。
我写了 (?<=;)[^\^]*
正则表达式,但我无法将其转换为在 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
那样容易扩展。