如何使用 lua 从有效 uuid 开始的主字符串中提取子字符串



我有一个主字符串如下 "/tmp/xjtscpdownload/7eb17cc6-b3c9-4ebd-945b-c0e0656a33f0/output/9999.317528060546245771146821638997525068657/">

从主字符串中,我需要从 uuid 部分开始提取一个子字符串

"/7eb17cc6-b3c9-4ebd-945b-c0e0656a33f0/output/9999.317528060546245771146821638997525068657/"

我试过了string.match("/tmp/xjtscpdownload/7eb17cc6-b3c9-4ebd-945b-c0e0656a33f0/output/9999.317528060546245771146821638997525068657/", "/[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}/(.(/(.(/$">

但是没有运气。

如果你想获得

"/7eb17cc6-b3c9-4ebd-945b-c0e0656a33f0/output/9999.317528060546245771146821638997525068657/"

"/tmp/xjtscpdownload/7eb17cc6-b3c9-4ebd-945b-c0e0656a33f0/output/9999.317528060546245771146821638997525068657/"

或者让我们说7eb17cc6-b3c9-4ebd-945b-c0e0656a33f0output9999.317528060546245771146821638997525068657,因为这是您的模式尝试所暗示的。否则,请省略以下解决方案中的括号。

您可以使用如下模式:

local text = "/tmp/xjtscpdownload/7eb17cc6-b3c9-4ebd-945b-c0e0656a33f0/output/9999.317528060546245771146821638997525068657/"
print(text:match("/([%x%-]+)/([^/]+)/([^/]+)"))

"/([^/]+)/"在两个斜杠之间捕获至少一个非斜杠字符。

在您的尝试中:

您不能在字符串模式中给出像{4}这样的计数。

你必须用%逃离-,因为它是一个神奇的角色。

(.)只会捕获一个角色。

请阅读Lua手册,了解你做错了什么以及如何正确使用字符串模式。

也试试代码

s="/tmp/xjtscpdownload/7eb17cc6-b3c9-4ebd-945b-c0e0656a33f0/output/9999.317528060546245771146821638997525068657/"
print(s:match("/.-/.-(/.+)$"))

它通过使用非贪婪匹配跳过前两个"字段"。

最新更新