【问题标题】:Possible match for (seemingly) invalid Lua-pattern可能匹配(看似)无效的 Lua 模式
【发布时间】:2012-06-19 10:21:58
【问题描述】:

我知道你不能在 Lua 中重复匹配组。例如,如果我想匹配两个连续的"45",我不能这样做:

print(string.find("some 4545 text", "(%d%d)+"))

将打印nil(未找到匹配项)。

但是,由于find(...) 没有报告错误(对于无效模式"%""(%d" 产生错误),这让我相信模式"(%d%d)+" 是一个有效的。

如果"(%d%d)+" 是一个有效的模式,它匹配什么?如果不是,是否有特定原因没有产生错误?

【问题讨论】:

    标签: string lua pattern-matching lua-5.2


    【解决方案1】:

    "(%d%d)+" 一个有效的模式。例如,它匹配“一些 45+67 文本”或“一些 4567+ 文本”,并在第一种情况下捕获“45”,在第二种情况下捕获“67”。

    【讨论】:

    • 啊哈,+ 只是变成了文字而不是元字符(这与我习惯的正则表达式/模式匹配引擎非常不同)。谢谢!
    • 我知道的其他正则表达式有这种歧义:括号用于分组(+ 有意义)和捕获。在 lua 模式中,没有分组,因此......但是,是的,手册可以更明确地说明这一点。
    【解决方案2】:

    要匹配连续两次出现的数字字符串,请使用"(%d+)%1"

    【讨论】:

    • 谢谢,虽然我已经知道了。我的问题是模式 "(%d%d)+" 应该匹配什么(如果它是有效的)。
    猜你喜欢
    • 2013-01-19
    • 2019-03-29
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 2011-02-03
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多