如何使用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}/(.) /(.)/$"

但是没有成功。

点赞
用户2858170
用户2858170

如果你想要从"/tmp/xjtscpdownload/7eb17cc6-b3c9-4ebd-945b-c0e0656a33f0/output/9999.317528060546245771146821638997525068657/"得到"/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手册,了解你的错误,并学习如何正确使用字符串模式。

2020-06-17 06:36:08
用户107090
用户107090

也尝试一下代码

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

print(s:match("/.-/.-(/.+)$"))

它通过使用非贪婪匹配而跳过了前两个“字段”。

2020-06-17 12:03:39