Ruby 用于匹配一组大括号之间的所有单词的正则表达式

Ruby 用于匹配一组大括号之间的所有单词的正则表达式,ruby,regex,Ruby,Regex,对于我认识的大多数正则表达式专家来说,这是一个简单的问题,但我试图返回句子中一些大括号之间单词的所有匹配项;然而Ruby只返回了一个匹配项,我不知道确切的原因 我用的是这个例句: sentence = hello {name} is {thing} 使用此正则表达式尝试返回“{name}”和“{thing}”: 但是,Ruby只返回“{name}”。有人能解释为什么两个词都不匹配吗?你很接近,但使用了错误的方法: sentence = "hello {name} is {thing}" se

对于我认识的大多数正则表达式专家来说,这是一个简单的问题,但我试图返回句子中一些大括号之间单词的所有匹配项;然而Ruby只返回了一个匹配项,我不知道确切的原因

我用的是这个例句:

sentence = hello {name} is {thing}
使用此正则表达式尝试返回“{name}”和“{thing}”:


但是,Ruby只返回“{name}”。有人能解释为什么两个词都不匹配吗?

你很接近,但使用了错误的方法:

sentence = "hello {name} is {thing}"

sentence.scan(/\{(.*?)\}/)
# => [["name"], ["thing"]]

可以使用正向查找(
)(因为您只告诉它匹配一次。(如果我真的知道Ruby,我会把它转换成一个答案。)啊,我在Regex类下查找,我甚至没有在String下看到scan方法。谢谢。我对它做了一点修改,使之仅为句子。scan(/\{.\}/)正如我在扫描中意识到的,我不必分组,也不必在比赛中加入花括号。谢谢你的帮助!
sentence = "hello {name} is {thing}"

sentence.scan(/\{(.*?)\}/)
# => [["name"], ["thing"]]
str = "hello {name} is {thing}"
str.scan /(?<=\{).*?(?=\})/
  #=> ["name", "thing"]
str = "hello {my {name} is {thing} from} the swamp"
str.scan /(?<=\{)[^{]*?(?=\})/
  #=> ["name", "thing"]