这是一个对于大多数正则表达式Maven来说很简单的问题,但是我试图返回一个句子中花括号之间的所有匹配;然而Ruby只返回一个匹配,我不知道为什么。我用这个例句:
sentence = hello {name} is {thing}
使用此正则表达式尝试返回“{name}”和“{thing}":
sentence[/\{(.*?)\}/]
但是,Ruby只返回“{name}"。谁能解释一下为什么这两个词不匹配?
oxiaedzo1#
你很接近了,但是用错了方法:
sentence = "hello {name} is {thing}" sentence.scan(/\{(.*?)\}/) # => [["name"], ["thing"]]
nwsw7zdq2#
可以使用 * 正向后查找 * (?<=\{)来实现这一点,要求匹配之前紧跟着一个左括号,以及 * 正向前查找 *,要求匹配之后紧跟着一个右括号。
(?<=\{)
str = "hello {name} is {thing}" str.scan /(?<={).*?(?=})/ #=> ["name", "thing"]
如果可以嵌套大括号,并且只需要内部大括号内的字符串,则需要将.*?替换为[^{]*?:
.*?
[^{]*?
str = "hello {my {name} is {thing} from} the swamp" str.scan /(?<={)[^{]*?(?=})/ #=> ["name", "thing"]
2条答案
按热度按时间oxiaedzo1#
你很接近了,但是用错了方法:
nwsw7zdq2#
可以使用 * 正向后查找 *
(?<=\{)
来实现这一点,要求匹配之前紧跟着一个左括号,以及 * 正向前查找 *,要求匹配之后紧跟着一个右括号。如果可以嵌套大括号,并且只需要内部大括号内的字符串,则需要将
.*?
替换为[^{]*?
: