📚

Vim の正規表現で最短マッチを行う

2024/04/08に公開

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 を利用してたけど ? が使えないのははじめて知りました。

GitHubで編集を提案

Discussion