【问题标题】:Lua Pattern for extracting/replacing value in / /用于提取/替换//中的值的Lua模式
【发布时间】:2011-04-07 17:33:49
【问题描述】:

我有一个类似hello /world today/的字符串

我需要将/world today/ 替换为/MY NEW STRING/

阅读我找到的手册

newString = string.match("hello /world today/","%b//")

我可以用gsub 替换它,但我想知道是否还有一种优雅的方式可以只返回/ 之间的文本,我知道我可以修剪它,但我想知道是否有模式.

【问题讨论】:

    标签: string design-patterns lua gsub lua-patterns


    【解决方案1】:

    尝试以下方法之一:

    • slashed_text = string.match("hello /world today/", "/([^/]*)/")
    • slashed_text = string.match("hello /world today/", "/(.-)/")
    • slashed_text = string.match("hello /world today/", "/(.*)/")

    这是有效的,因为string.match 返回模式中的任何捕获,或者如果没有捕获则返回整个匹配的文本。那么关键是确保模式具有适量的贪婪,记住 Lua 模式不是完整的正则表达式语言。

    前两个应该匹配相同的文本。首先,我明确要求模式匹配尽可能多的非斜线。第二个(感谢 lhf)匹配任何字符的最短跨度,后跟一个斜杠。第三个是贪婪的,它匹配最长的跨度字符,后面仍然可以跟一个斜杠。

    原始问题中的%b///.-/ 相比没有任何优势,因为这两个分隔符是相同的字符。

    编辑:添加了 lhf 建议的模式,以及更多解释。

    【讨论】:

    • 谢谢,我会试一试的。
    • 你可能想要"/(.-)/"而不是"/(.*)/"
    猜你喜欢
    • 2013-11-20
    • 2014-10-12
    • 2014-11-15
    • 1970-01-01
    • 2014-06-26
    • 2012-10-01
    • 2015-05-26
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多