String 将完整、精确的文本行与Lua匹配
我在找一些Lua的小帮手。我需要一些代码来匹配这一行: efs.test efs.test.gpg 以下是我到目前为止得到的与“efs.test”匹配的内容: 我也试过这个,它与:String 将完整、精确的文本行与Lua匹配,string,lua,match,String,Lua,Match,我在找一些Lua的小帮手。我需要一些代码来匹配这一行: efs.test efs.test.gpg 以下是我到目前为止得到的与“efs.test”匹配的内容: 我也试过这个,它与: if string.match(a.message, "efs.test") then print(a.message) else print ("Does not match") end 但是,当我尝试添加额外的文本时,我的编译器在运行此代码时出现了“Number expected,get string”错误
if string.match(a.message, "efs.test") then
print(a.message)
else
print ("Does not match")
end
但是,当我尝试添加额外的文本时,我的编译器在运行此代码时出现了“Number expected,get string”错误:
if string.match(a.message, "efs.test", "efs") then
print(a.message)
else
print ("Does not match")
end
任何指针都会很棒
谢谢。
string.match
可选第三个参数是要开始搜索的给定字符串的索引。如果您正在按照给定间距的顺序查找efs.test efs.test.gpg
,为什么不使用:
string.match(a.message, "efs%.test efs%.test%.gpg")
如果要匹配包含该子字符串的整行:
string.match(a.message, ".*efs%.test efs%.test%.gpg.*")
首先,这是对量词的错误使用。发件人:
+1次或多次重复
*0次或多次重复
-也可以重复0次或更多次
??可选(0或1次出现)
换句话说,在已将完整单词与无限%a匹配后,您尝试匹配无限%a++
为了匹配
efs.test efs.test.gpg
,我想我们有两个文件名,严格意义上,文件名可能只包含%w
-字母数字字符(a-Za-z0-9)。这将正确匹配efs。测试:
string.match(消息,“%w+%。%w+”)
进一步,将efs.test
匹配为文件名和以下文件名:
string.match(消息,“%w+%.%w+%w+%.%.gpg”)
虽然这将匹配两个文件名,但您需要检查匹配的文件名是否相同。我们可以更进一步:
本地文件,gpgfile=string.match(消息,(%w+.%.w+(%1%.gpg))
此模式将返回文件名相等的任何.gpg
通过使用捕获组,我们捕获文件名:它将作为第一个变量返回,并进一步表示为%1。然后在空格字符之后,我们尝试匹配%1
(捕获的文件名),后跟.gpg
。因为它也包含在括号中,所以它将成为第二个捕获的组,并作为第二个变量返回。完成了
PS:您可能希望通过不区分大小写的[Gg][Pp][Gg]模式获取“.gpg”
PPS:文件名可能包含空格、破折号、UTF-8字符等。例如,仅禁止
\0
和/
字符。如果您试图匹配精确的行,其方法更易于使用:
string.match(a.message, "efs%.test efs%.test%.gpg")
如果“efs.test efs.test.gpg”=a.message那么
打印(一条信息)
其他的
打印(“字符串不匹配!”)
结束
当然,除此之外,找不到任何其他字符串。
对于您的问题,我看到的另一种解释是,您想知道字符串中是否有efs.test,您应该能够通过执行以下操作来完成:
如果string.match(一条消息,“%w+%。%w+”)==“efs.test”,则
...
结束
另外,查看regex,它基本上是Lua用于匹配字符串的语言,但有一些例外。只是为了确认您是否在查看
a.message
中是否存在efs.test efs.test.gpg
?或者是您在寻找与efs.test efs.test.gpg完全匹配的a.message
?
if string.match(a.message, "%a+%a+%a+.%%a+%a+%a+%a+") then