我有一个主字符串如下 "/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-c0e0656a33f0
,output
和9999.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("/.-/.-(/.+)$"))
它通过使用非贪婪匹配跳过前两个"字段"。