.*
表示任何字符,那么为什么.*?
下面需要?
str.gsub(/\#{(.*?)}/) {eval($1)}
.*
是贪婪匹配,而.*?
是非贪婪匹配。请参阅此链接以获取有关它们的快速教程。贪婪匹配将尽可能多地匹配,而非贪婪匹配将尽可能少匹配。
在本例中,贪心变体抓取第一个{
和最后一个}
(最后一个右大括号)之间的所有内容:
'start #{this is a match}{and so is this} end'.match(/\#{(.*)}/)[1]
# => "this is a match}{and so is this"
而非贪婪的变体读取尽可能少地进行匹配,所以它只在第一个{
和第一个连续的之间读取}
。
'start #{this is a match}{and so is this} end'.match(/\#{(.*?)}/)[1]
# => "this is a match"