Quantcast
Channel: Big Sky
Viewing all articles
Browse latest Browse all 121

Re: VimでURLをドメインだけに置換するコマンドを正規表現でうったら、本当に正規表現って意味不明なフォルムと思った。

$
0
0
VimでURLをドメインだけに置換するコマンドを正規表現でうったら、本当に正規表現って意味不明なフォルムと思った。 - Qiita
http://qiita.com/mochizukikotaro/items/b15170dccb18d84f8cd2
:%s/\([:\/]\)\@<!\/.*$//g
なんか、とても意味不明なコマンドだ。きっと、もっとスマートなものがあるのだろう。コードゴルフで言えばトリプルボギー的な感じなのでしょうか。知らないけど。
この問題は
  • URL を扱うので /が多く、置換の区切りを /にする場合エスケープが多くなる
  • very magic でないのでエスケープがさらに増える

この2点から生まれます。1点目は

:%s#\([:/]\)\@<!/.*$##g
#
:%s,\([:/]\)\@<!/.*$,,g

,をセパレータにする事で少しは解消するかと思います。2点目は \vを付ける事でキャプチャ \(\)()と書く事が出来ます。

ただし今回の例はパターンが短いので効果は出ませんが、もう少し長いパターンだと効果が表れます。

あと、この例では Vim 独自の \zsを使う事でもう少しシンプルに書く事も出来ます。

:%s!//[^/]\+\zs/.*!!g
  • //で始まり
  • /で無い物が続き
  • \zsそこまでは置換対象から外す
  • /.*を置換対象とする(※1)

結果、/.*つまり URL のパス部分(※1)だけが空白に置き換えられるので URL のホスト名までが残ります。

もちろんちゃんとしたURLで判定する場合は、もう少し細かな条件が必要となります。


Viewing all articles
Browse latest Browse all 121

Trending Articles