Vimで最短一致
今までドキュメントをあまり読んでいなかったために、Vimでの最短一致のやり方が今ひとつ分からなかったのだが、少し調べたらすぐに分かった。
http://www.ac.cyberhome.ne.jp/~yakahaira/vimdoc/usr_27.html最短一致
今まで説明した繰り返し指定は、可能な限りたくさんの文字列にマッチしようとします。できるだけ少ない回数だけマッチさせるには "\{-n,m}" を使います。動作は"\{n,m}" とほとんど同じですが、最短一致が使われます。
- 例
- /ab\{-1,3}
"abbbb" の中の "ab" だけがマッチします。一つの "b" にマッチするだけで条件を満たすので、二つ目以降の "b" には絶対にマッチしません。後ろに他のパターンが続いているなら最小回数以上の文字にもマッチします。
"n" と "m" を省略した場合も同じルールが適用されます。両方の数字を省略して"\{-}" とすることもできます。これは直前の文字が 0 回以上繰り返されている場合に最小の数だけマッチします。単体で使った場合は常に 0 回にマッチします。他のパターンと組み合わせて使うと便利です。
- 例
- /a.\{-}b
"axbxb" の中の "axb" にマッチします。次のパターンを使った場合は:
- 例
- /a.*b
".*" は可能な限り多くの文字にマッチするので "axbxb" 全体がマッチします。
一般的な正規表現で使用されている/.+?/
ではマッチしなかったので助かった。