Vimの正規表現が良く分からなかったので、必要になったものを少し調べてみました。
目次
最短一致でマッチ
最短一致に使う正規表現をネット検索したら以下のものがありました。
Vimの正規表現における最短一致 \{-}
という3つのsakanaを含むテキストを使って実験してみました。
上記テキストのうち2つ目のsakanaまでをマッチさせたい場合は次のようにします。
sakana.\{-}sakana
こうすると最短一致となり、
にマッチします。
ちなみに、Vim以外では *? を最短一致に使います。これを鬼車で試したところ、次の書き方で最短一致ができました。
sakana.*?sakana
失敗例も書いておきます。
sakana.*sakana
この書き方だと最長一致になるので
という風に3つ目のsakanaまで含まれてしまいます。
ダブルクォーテーションの内側だけにマッチ
ダブルクォーテーションの中にあるテキストだけをマッチさせる場合(ダブルクォーテーションは含まない)、次のようにします。
"\@<=..*"\@=
ダブルクォーテーションも含める場合は、上の例から先読みと後読みに関する部分を除去するだけです。
"..*"
行をまたいでマッチ(複数行マッチ)
"" aaaaaaaaaaaaaa bbbbbbbbbb ccccccccccccccccc "" ddddd ""
というテキストがあったとして、1行目の""から5行目の""までを最短一致でマッチさせるなら
""\_.\{-}""
とします。最短一致なので、dddd以下はマッチしません。
空行にマッチ
空行をマッチさせるのにどうやるのか少し悩みましたが、^$ であっさりとマッチしました。if文で使うとしたら
let line_content = getline(line('.')) " 現在行の内容をline_contentに代入 if line_content =~ '^$' || line_content =~ '^ *' " 空行 OR 半角spaceのみ echo '空行 or 半角spaceのみ' endif
という感じです。
ファイル末尾にマッチ
ファイル末尾(EOF)は
\%$
で表現できます。