0

.*表示任何字符,那么为什么.*?下面需要?

str.gsub(/\#{(.*?)}/) {eval($1)}
4

1 回答 1

7

.*是贪婪匹配,而.*?是非贪婪匹配。请参阅此链接以获取有关它们的快速教程。贪婪匹配将尽可能多地匹配,而非贪婪匹配将尽可能少匹配。

在本例中,贪心变体抓取第一个{和最后一个}(最后一个右大括号)之间的所有内容:

'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"
于 2013-06-12T04:58:52.033 回答