【问题标题】:what are the use of parentheses in this Lua pattern?在这个 Lua 模式中括号的用途是什么?
【发布时间】:2012-07-26 11:33:51
【问题描述】:

基本字符串是:IP: 192.168.0.1

将该字符串传递给 string.gmatch 函数(除了下面的模式)将返回以下结果:

模式:IP: (%d+.%d+.%d+.%d+) -->192.168.0.1

模式:IP: %d+.%d+.%d+.%d+ -->IP:192.168.0.1

我的问题是,这些括号对 Lua 模式匹配引擎的含义是什么? 为什么在第一个模式中使用括号,IP: 字符串被省略,而在第二个模式中没有?

【问题讨论】:

    标签: lua lua-patterns


    【解决方案1】:

    在这种情况下,它应该只用于对事物进行分组,这两种方式都无关紧要。

    【讨论】:

      【解决方案2】:

      括号内的任何内容都是capture groupmatch()gmatch() 捕获并返回与括号中的模式部分匹配的输入字符串的任何部分。如果模式中没有捕获组,则返回整个字符串。

      local x, y, z = ("123456"):match("(%d)%d(%d)%d(%d)%d")
      print(x, y, z)
      -- 1, 3, 5
      

      在指定关联捕获组后的任何时候,%1%2 等都可以用于访问捕获的值:

      local x, y = ("123123123"):match("(%d%d%d)%1(%1)")
      print(x, y)
      -- 123, 123
      

      这在string.gsub() 的第三个参数中最常见,但可以在任何模式匹配函数中使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 2020-08-20
        • 2018-01-26
        • 2017-05-11
        • 1970-01-01
        • 2018-03-24
        相关资源
        最近更新 更多