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

lfapxunr  于 12个月前  发布在  Ruby
关注(0)|答案(2)|浏览(104)

这是一个对于大多数正则表达式Maven来说很简单的问题,但是我试图返回一个句子中花括号之间的所有匹配;然而Ruby只返回一个匹配,我不知道为什么。
我用这个例句:

sentence = hello {name} is {thing}

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

sentence[/\{(.*?)\}/]

但是,Ruby只返回“{name}"。谁能解释一下为什么这两个词不匹配?

oxiaedzo

oxiaedzo1#

你很接近了,但是用错了方法:

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

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

nwsw7zdq2#

可以使用 * 正向后查找 * (?<=\{)来实现这一点,要求匹配之前紧跟着一个左括号,以及 * 正向前查找 *,要求匹配之后紧跟着一个右括号。

str = "hello {name} is {thing}"
str.scan /(?<={).*?(?=})/
  #=> ["name", "thing"]

如果可以嵌套大括号,并且只需要内部大括号内的字符串,则需要将.*?替换为[^{]*?

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

相关问题