【问题标题】:How to extract a substring from main string starting from valid uuid using lua如何使用lua从有效uuid开始的主字符串中提取子字符串
【发布时间】:2020-10-06 18:40:41
【问题描述】:

我有一个主字符串如下 "/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}/(.)/(. )/$"

但没有运气。

【问题讨论】:

    标签: nginx lua openresty


    【解决方案1】:

    如果你想获得

    "/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 manual 了解您做错了什么以及如何正确使用字符串模式。

    【讨论】:

      【解决方案2】:

      也试试代码

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-29
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 2011-01-19
        相关资源
        最近更新 更多