Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 将完整、精确的文本行与Lua匹配_String_Lua_Match - Fatal编程技术网

String 将完整、精确的文本行与Lua匹配

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”错误

我在找一些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", "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