-->
./
<!-- フラ&#65533;ュが見れな&#65533;のためにここに何か書&#65533; --> フラ&#65533;ュがインス&#65533;&#65533;ルされて&#65533;&#65533;たいで&#65533;&#65533;&#65533;

2010年04月05日

[Vim]正規表現でマッチする範囲を制限する

Vim-users.jp - Hack #70: 正規表現でマッチする範囲を制限する
Vim の正規表現には変わった機能として、マッチングの範囲を制限する機能があります。他の正規表現エンジンではあまり見かけない書き方ですが、使い方さえわかれば非常に便利な機能です。
\zs と \ze

\zs (start の s) と \ze (end の e) を使うことでマッチする範囲を限定することができます。例えば、

/function\s\+\zs\k\+

と検索すると、function に続く単語が検索されます。この際、function の部分はハイライトされません。なぜなら、\zs のある箇所からがマッチ対象になるためです。同様に \ze があった場合はそれ以降の文字列はマッチ対象から外れます。

 こちらで始めに目にして気になり調べてみました。これは結構使えそうです。
 例えば次のようなコードがあったとして、
for line in getline(1, 20)
        let getline_str = ""
          if line =~ "Date: "
            echo matchstr(line, 'Date: \zs.*')
          endif
        endfor

 :%s/.*\sget\zs.*\ze(/put/g
と実行すると、

for line in getput(1, 20)
        let getline_str = ""
          if line =~ "Date: "
            echo matchstr(line, 'Date: \zs.*')
          endif
        endfor
for line in getput(1, 20)
        let getline_str = ""
          if line =~ "Date: "
            echo matchstr(line, 'Date: \zs.*')
          endif
        endfor

のように変換されました。まともに単語だけ指定して置換するとgetline_strの部分も置き換わっているはずです。




posted by hirono at 02:43| Comment(0) | TrackBack(0) | Vim
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/36874420

この記事へのトラックバック