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 に答える