2

ブロック内のすべてのテキストを一致させようとしています:

group :development do
  gem 'test'
end

上記のコンテキストでは、 を返したいです"gem 'test'"。私が使用しているのは次のとおりです。

/(?<=group :development do)(.*)(?=end)/m

うまくいかないのはなぜですか?

4

1 に答える 1

4

正確な理由はわかりませんが、 を に変更する.*.*?、これを一致させることができます。

ルビュラー: http://www.rubular.com/r/GaQj6cM0rk

との相性も良さそうです.*が、なぜか後戻りしていないようです。

.*代わりに使用された場合のルビュラーは次のとおりです: http://www.rubular.com/r/jKf0bDZi7T

この動作の理由に関係なく、.*?とにかく使用する必要があることに注意してください。そうしないと、最初のブロックの先頭から最後のブロックの末尾までの単一の一致しか見つかりません (文字列に複数のブロックがある場合)。

于 2013-03-05T20:38:26.170 に答える