String 用于提取/替换//

String 用于提取/替换//,string,design-patterns,lua,gsub,lua-patterns,String,Design Patterns,Lua,Gsub,Lua Patterns,我有一个字符串,比如hello/world today/ 我需要将/world today/替换为/MY NEW STRING/ 阅读我找到的手册 newString = string.match("hello /world today/","%b//") 我可以用gsub来替换它,但我想知道是否有一种优雅的方法可以只返回/之间的文本,我知道我可以修剪它,但我想知道是否有一种模式。尝试以下方法之一: slashed_text=string.match(“hello/world today/”

我有一个字符串,比如
hello/world today/

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

阅读我找到的手册

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

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

尝试以下方法之一:

  • slashed_text=string.match(“hello/world today/”,“/([^/]*)/”
  • slashed_text=string.match(“hello/world today/”,“/(.-)/”
  • slashed_text=string.match(“hello/world today/”,“/(.*)/”
这是因为返回模式中的任何捕获,或者如果没有捕获,则返回整个匹配文本。然后,关键是确保模式具有适当的贪婪性,记住Lua模式不是一种完整的正则表达式语言

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

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


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

谢谢,我会试一试。您可能想要
“/(.-)/”
而不是
“/(.*)/”