我有一个像hello /world today/
我需要将/world today/
替换为/MY NEW STRING/
阅读我找到的手册
newString = string.match("hello /world today/","%b//")
我可以使用gsub
替换,但我想知道是否还有一种优雅的方式只返回/
之间的文本,我知道我可以修剪它,但我想知道是否有一种模式。
答案 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建议的模式,以及更多解释。