首页 > 解决方案 > Lua Pattern,组合句柄的问题

问题描述

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

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

一个 ||

Z <<

哦~~~

哦..


当前代码:

C = [[

A

B|

C<

Z<<

O~~~

O.

O..

]]

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

输出:

B|

C<

Z<

O~

O.

O.

标签: lualua-patterns

解决方案


你的模式应该是这样的:(\n%a[|<~%.]+).

将 a(放在 lua 模式中set只会添加(到可以匹配的字符列表中,它不会产生“子集”或强制要求的匹配长度。

如果在一个集合中重复,Lua 模式不匹配多个字符。要匹配多个字符,您需要使用+*或使用集合的多个实例,如下所示:(\n%a[|<~%.][|<~%.][|<~%.]).

与此相关的问题是该集合的多个实例必须全部匹配,而如果+使用它,您可以匹配的实例长度存在可变性,例如一个.而不是三个。

您不能强制粒度来匹配 2 个不同长度的字符。我的意思是你不能在不匹配的情况O<<O~~~以相同的模式具体匹配O<<<,O~~O<<~.

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

FHUG - 理解 Lua 模式


推荐阅读