📚
Vim の正規表現で最短マッチを行う
Vim でやろうと思ったらシュッとできなかったので覚書。
正規表現で最短マッチを実現したい場合に ?
を使います。
例えば Ruby だと以下のような形で実現することができます。
# 最初にマッチした <a> を取得したい
pp "<a>hoge</a>".match(/<.*?>/)
# => #<MatchData "<a>">
これを Vim で実現しようとするとうまく動きません。
echo matchstr("<a>hoge</a>", '<.*?>')
" => ""
*?
でなくて \{-}
を使う
Vim の場合は Vim で最短マッチを利用する場合は *?
ではなくて \{-}
を利用する必要があります。
echo matchstr("<a>hoge</a>", '<.\{-}>')
" => "<a>"
いままでそれなりに Vim を利用してたけど ?
が使えないのははじめて知りました。
Discussion