← Vim研究所

正規表現置換の練習ドリル5問

2019-12-17 公開 ・ 更新: 2026-08-05

:s///の基本形は使えても、グループ参照や大文字小文字変換を組み合わせたパターンになると、実行結果を正確に予測できるか怪しくなる人も多いはずです。5問の予測ドリルで正規表現置換の感覚を確かめてください。

表記のルール:コマンドを実行する前のテキストを示し、実行後どうなるかを予測してから答えを確認します。

目次(6項目)

問題1

次のテキストに対して:s/\(\d\d\)\/\(\d\d\)/\2\/\1/を実行すると、どうなりますか。

Date: 03/08
答えを見る

\(...\)でグループ化した「03」と「08」を、置換後の文字列側で\2(2番目のグループ)→\1(1番目のグループ)の順に入れ替えて出力します。月日の並び順を逆にする置換です。

Date: 08/03

問題2

次のテキストに対して:s/\(.*\)/\U\1/を実行すると、どうなりますか。

hello world
答えを見る

\(.*\)で行全体をグループ化し、置換後の文字列で\Uを使うと、それ以降の文字列(\1で参照した部分)がすべて大文字に変換されます。

HELLO WORLD

問題3

次のテキストに対して:%s/\<./\u&/gを実行すると、どうなりますか。

the quick brown fox
答えを見る

\<.は各単語の先頭1文字にマッチします。置換後の\u&は、マッチした文字(&はマッチ全体を表す)の最初の1文字だけを大文字化します。結果として各単語の頭文字が大文字になります。

The Quick Brown Fox

問題4

次のテキストに対して:s/foo\zsbar/baz/を実行すると、どうなりますか。

foobar and foobaz
答えを見る

\zsは「ここから実際のマッチ開始位置とする」という指定です。パターン全体は「foobar」にマッチさせつつ、実際に置換される範囲は\zsより後ろの「bar」だけになります。「foo」は残ったまま「bar」だけが「baz」に変わります。

foobaz and foobaz

問題5

次のテキストに対して:s/,\s*/\r/gを実行すると、どうなりますか。

apple, banana,  cherry
答えを見る

,\s*はカンマとその直後の任意個の空白にマッチします。置換後の文字列\rは改行を挿入する特殊な指定で、カンマ区切りのテキストを1行1項目に分割します。

apple
banana
cherry
要点:グループ参照\1/\2、大文字小文字変換の\U/\u、マッチ開始位置を調整する\zsを覚えると、置換パターンの表現力が一気に広がります。
使ってみて

\zsを知らなかった頃は、部分置換のためにグループ参照を使った長いパターンを書いていましたが、\zsを覚えてからは「マッチはさせたいが置換したくない部分」を素直に書けるようになり、パターン自体がずっと短くシンプルになりました。

まとめ

正規表現置換はグループ参照・大文字小文字変換・\zsのような特殊指定を組み合わせることで、単純な文字列置換では対応できない変換までカバーできます。基本形からもう一歩踏み込んだパターンは:substituteコマンド活用集もあわせて参照してください。

← Vim研究所 トップへ戻る