用于提取/替换值的Lua模式/ /

时间:2010-09-03 08:02:23

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

我有一个像hello /world today/

这样的字符串

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

阅读我找到的手册

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

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

1 个答案:

答案 0 :(得分:2)

尝试类似下列之一:

  • 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建议的模式,以及更多解释。