gpt4 book ai didi

string - 用 Lua 匹配整个、精确的文本行

转载 作者:行者123 更新时间:2023-12-04 01:48:35 30 4
gpt4 key购买 nike

我正在寻找一些关于 Lua 的帮助。我需要一些代码来匹配这一行:

efs.test efs.test.gpg

这是我目前拥有的与“efs.test”匹配的内容:

if string.match(a.message, "%a+%a+%a+.%%a+%a+%a+%a+") then
print(a.message)

else

print ("Does not match")
end

我也试过这个,它匹配:

if string.match(a.message, "efs.test") then
print(a.message)

else

print ("Does not match")
end

但是当我尝试添加额外的文本时,我的编译器在运行此代码时出现“预期的数字,得到了字符串”错误:

if string.match(a.message, "efs.test", "efs") then
print(a.message)

else

print ("Does not match")
end

任何指针都会很棒!

谢谢。

最佳答案

if string.match(a.message, "%a+%a+%a+.%%a+%a+%a+%a+") then

首先,这是对量词 的错误使用。来自 PiL 20.2 :

+ 1 or more repetitions

* 0 or more repetitions

- also 0 or more repetitions

? optional (0 or 1 occurrence)

换句话说,在你已经用 unlimited %a+ 匹配了完整的单词之后,你尝试匹配 unlimited %a+


匹配efs.test efs.test.gpg - 我想我们有 2 个文件名,严格意义上的文件名可能只包含 %w - 字母数字字符 (A-Za-z0-9)。这将正确匹配 efs.test :

string.match(message, "%w+%.%w+")

更进一步,匹配efs.test作为文件名和以下文件名:

string.match(message, "%w+%.%w+ %w+%.%w+%.gpg")

虽然这会匹配两个文件名,但您需要检查匹配的文件名是否相同。我们可以更进一步:

local file, gpgfile = string.match(message, "(%w+%.%w+) (%1%.gpg)")

此模式将返回任何 <filename> <filename>.gpg文件名相等的地方。

使用捕获组,我们捕获文件名:它将作为第一个变量返回并进一步表示为 %1。然后在空格字符之后,我们尝试匹配 %1 (捕获的文件名)后跟 .gpg .由于它也包含在方括号中,因此它将成为第二个捕获组并作为第二个变量返回。完成!

PS:您可能希望通过不区分大小写的 [Gg][Pp][Gg] 模式获取“.gpg”。

PPS:文件名可以包含空格、破折号、UTF-8 字符等。例如ext4只禁止 \0/字符。

关于string - 用 Lua 匹配整个、精确的文本行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54331390/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com