Lua模式,组合处理问题

我想捕获一些字符串,但为什么这行不通呢?我注意到使用[]它只检测每个单独的字符,我想知道是否可能用更多的字符

我想要这些组合,但是它是错误的

A ||

Z <<

O ~~~

O..


目前的代码:

C = [[

A

B|

C<

Z<<

O~~~

O.

O..

]]

C = C:gsub("(\n%a[(||)(<<)(~~~)(%.%.%.)])",function(a)
print(a)
end)

输出:

B|

C<

Z<

O~

O.

O.
点赞
用户7396148
用户7396148

你的模式应该类似于:(\n%a[|<~%.]+)

在 Lua 模式“集合”中放置一个 ( 只会将 ( 添加到可匹配字符的列表中,而不是创建“子集”或强制匹配长度。

Lua 模式不会在单个集合中重复匹配多个字符。要匹配多个字符,你需要使用 +*,或多次使用集合,如:(\n%a[|<~%.][|<~%.][|<~%.])

但此方法的问题是,集合的多个实例必须全部匹配,而如果使用 +,则可以匹配实例长度变化,例如只匹配一个 . 而不是三个。

你无法强制匹配两个不同长度的字符。我的意思是,你不能在同一个模式中特定地匹配 O<<O~~~,同时不匹配 O<<<O~~O<<~

了解更多关于 Lua 模式的资源:

FHUG - 理解 Lua 模式

2019-09-03 14:44:00