【问题标题】:LUA delete 2 different characters with gsubLUA用gsub删除2个不同的字符
【发布时间】:2021-04-04 20:21:16
【问题描述】:

我想用 gsub 删除 my_string 开头和结尾的两个不同字符。 但我设法只删除了一个..

    local my_string  = "[I wish you a happy birthday]"
    local new_string = bouquet:gsub('%]', '')
    print(new_string)

如何创建正确的 gsub 模式?

【问题讨论】:

  • 如果字符存在,请尝试my_string:sub(2,-2)

标签: lua gsub openresty lua-patterns


【解决方案1】:

你可以这样做:

local new_string = my_string:match("^%[(.*)]$")

explanation:匹配以[ 开头并以] 结尾的字符串,并返回两者之间的内容。对于任何其他字符串,它将按原样返回。

【讨论】:

    【解决方案2】:

    你可以使用

    local new_string = my_string:gsub('^%[(.*)]$', '%1')
    

    this Lua demo^%[(.*)]$ 模式匹配

    • ^ - 字符串开头
    • %[ - 文字 [ char
    • (.*) - 将任何零个或多个字符捕获到第 1 组中(%1 指的是替换模式中的此值)
    • ] - 一个 ] 字符
    • $ - 字符串结束。

    或者,您可以使用

    local new_string = string.gsub(my_string:gsub('^%[', ''), ']$', '')
    

    this Lua demo online

    ^%[ 模式匹配字符串开头的 []$ 匹配字符串结尾的 ] 字符。

    如果不需要检查[]的位置,就用

    local new_string = my_string:gsub('[][]', '')
    

    请参阅Lua demo

    [][] 模式匹配 ] 字符或 [ 字符。

    【讨论】:

    • @bobblebubble 这不是重复的,因为问题不是关于正则表达式,而是关于 Lua 模式。我替换了错误的标签。
    • [][] 正则表达式匹配”——这是一个模式,而不是一个正则表达式;)
    【解决方案3】:

    既然你知道 gsub 的基本模式,我建议一个简单的方法来解决你的问题。

    local new_string = my_string:gsub('%]',''):gsub('%[','')
    

    【讨论】:

      【解决方案4】:

      所以...

      do
      local my_string="[I wish you a happy birthday]"
      local new_string=my_string:gsub('[%[%]]','',2)
      print(new_string)
      end
      

      ...导致所需的输出。 % 转义 [] - 就像其他语言中的 \ 一样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多