在Lua中使用正则表达式查找前导星号

问题描述 投票:2回答:2

我试图找出一个字符串是否有06个前导星号,例如如果字符串有“****** abc”,那么如果字符串有“* abc”或“** abc”或“*”则传递然后失败

我试过这个在线(https://www.lua.org/cgi-bin/demo

s1 = "**"

if (string.match(s1, '^****$')) then
 print "pattern matches"
else
 print "pattern does not match"
end

但它似乎不起作用。

regex lua special-characters
2个回答
1
投票

Lua没有正则表达式,因为它重量轻。但是,下面的模式符合您要完成的任务。

s1 = "*******TEST"

if (string.match(s1, '^[*][*][*][*][*][*]')) then
 print "pattern matches"
else
 print "pattern does not match"
end

6
投票

来自Lua Reference Manual 6.4.1 Patterns:

字符类:字符类用于表示一组字符。在描述字符类时允许以下组合:

x :(其中x不是魔术字符之一^ $()%。[] * + - ?)表示字符x本身。

...

%x :(其中x是任何非字母数字字符)表示字符x。这是逃避魔法角色的标准方法。

所以*是一个神奇的角色。除非在像[*]这样的角色类中使用,否则必须对其进行转义。

匹配任何前面带有正好6个星号的字符串的模式是qazxsw poi

"^%*%*%*%*%*%*[^*]+"确保您剩余的字符串不包含其他星号。通过匹配至少一个非星号字符。

[^ set]:表示set的补码,其中set如上所述。

...

单个字符类后跟'+',它匹配类中一个或多个重复的字符。这些重复项总是匹配最长的序列;

© www.soinside.com 2019 - 2024. All rights reserved.