Vimで最短一致

今までドキュメントをあまり読んでいなかったために、Vimでの最短一致のやり方が今ひとつ分からなかったのだが、少し調べたらすぐに分かった。

最短一致

今まで説明した繰り返し指定は、可能な限りたくさんの文字列にマッチしようとします。できるだけ少ない回数だけマッチさせるには "\{-n,m}" を使います。動作は"\{n,m}" とほとんど同じですが、最短一致が使われます。

/ab\{-1,3}

"abbbb" の中の "ab" だけがマッチします。一つの "b" にマッチするだけで条件を満たすので、二つ目以降の "b" には絶対にマッチしません。後ろに他のパターンが続いているなら最小回数以上の文字にもマッチします。

"n" と "m" を省略した場合も同じルールが適用されます。両方の数字を省略して"\{-}" とすることもできます。これは直前の文字が 0 回以上繰り返されている場合に最小の数だけマッチします。単体で使った場合は常に 0 回にマッチします。他のパターンと組み合わせて使うと便利です。

/a.\{-}b

"axbxb" の中の "axb" にマッチします。次のパターンを使った場合は:

/a.*b

".*" は可能な限り多くの文字にマッチするので "axbxb" 全体がマッチします。

http://www.ac.cyberhome.ne.jp/~yakahaira/vimdoc/usr_27.html

一般的な正規表現で使用されている/.+?/ではマッチしなかったので助かった。