Honmushi blog
Vimでよく使う正規表現2019/10/24

Vimでよく使う正規表現

vimでよく使う正規表現の書き方のメモです。

正規表現は便利ですが覚えるのは難しいです。特にVimは他のアプリと異なるエスケープのルールがあるので混乱しがちです。 \vでモード指定することも出来ますが、私はデフォルトで使うのが好みです。

あくまでも自分用メモです。参考になるようでしたら真似してみてください。
新しい正規表現のテクニックや便利なパターンを見つけたら追記していくつもりです。

概要

  • 正規表現を用いた置換
  • エスケープが必要なもの
  • 修飾子 オプション
  • 検索文字列のエスケープ

正規表現を用いた置換

基本の使い方

:s/hoge/huga/
:s/hoge/huga/g
:%s/hoge/huga/
:10,20s/hoge/huga/

一つずつ確認する

末尾にcを付けると対象を確認しながら置換できる。
yで置換、nで次の候補へ。qで終了、aは以降全部置換、lは置換して終了。

:%s/hoge/huga/gc

後方参照として置換に利用

エスケープが必要な文字にちょっと注意。 \1,\2で置換先で参照できる。後方参照。

:s/^hoge\(.\+\)$/huga\1/

&はマッチ全体

事前に検索

直前の検索の結果が自動的に利用できます。検索に一致した部分をすべて置換する。

/hoge
:%s//huga/g

<C-r>レジスタを使って入力してもいいと思います。

エスケープが必要なもの

\+
\?
\{1,3}
\<the\>
\( \)
\(aaa\|bbb\)
\%( \)

最後の%付けるのは後方参照しないようにするため。その結果、処理が早かったりする。後方参照は多分9個までなのでそこにも影響。

特殊な文字

\s 空白文字
\d [0-9]
\x [0-9A-Fa-f]
\o [0-7]
\w [0-9A-Za-z_]
\h [A-Za-z_]
\a [A-Za-z]
\l [a-z]
\u [A-Z]
大文字にすると逆になり、それ以外にマッチする
\_sにすると改行を含む文字にマッチする

\e Esc
\t Tab
\n 改行
\r CR
\b BS

修飾子 オプション

大文字小文字の厳密化

大文字小文字を厳格に区別するためには\Cを付ける。実は最初でなくてもどこにつけても良い。

:%s/\CHoge/Huga/g

モード

4つのモードがある。

  • magic
  • nomagic
  • very magic
  • very nomagic

\vを付けることで、very magic モードとなり、他と同様な文法で書くことができるという認識です。

:s/\v^hoge(.+)$/huga\1/

検索文字列のエスケープ

\/を初めとして、文字列として使うにはエスケープしないといけない文字があります。

escapeスクリプトを使って便利に変換する方法が以下です。

レジスタuの中身の\と/をエスケープする
1. 対象のURLをレジスタuにヤンク
2. / で検索プロンプトを表示
3. <C-r>=でExpressionレジスタのプロンプトを表示
4. =escape(@u,\/)を入力してリターン

おわりに

モードを変更すれば他のアプリケーションと同様な文法で書くことも出来ますし、設定でそれをデフォルトにすることもできます。

私は好みでデフォルトのVimルールをなるべく使っています。 複雑な正規表現書くときは\v使ったほうがスッキリできるので良いと思います。

  • このエントリーをはてなブックマークに追加