手軽屋
ツール一覧

単純置換と正規表現置換の使い分け

「VSCodeの置換でうまくいかなかったから、こっちでやろう」と思って手軽屋に来た方も多いはず。 単純置換と正規表現置換は、得意な仕事と苦手な仕事がはっきり分かれます。 本記事では両者の違いと使い分け、初心者の事故例を紹介します。

単純置換とは

手軽屋の「テキスト一括置換」が採用しているのが「単純置換(リテラル置換)」。 入力した文字列を、書いたとおりに探して書いたとおりに置き換えます。. は本物のピリオド、* は本物のアスタリスク、(abc) は本物の括弧文字。何も特別な意味を持ちません。

技術的にはJavaScriptの String.prototype.replaceAll() に文字列を渡したのと同じ挙動です(MDN仕様)。

正規表現置換とは

VSCode・Sublime Text・サクラエディタ・秀丸の「正規表現(regex)置換」では、 特定の記号が「パターン記号」として特別な意味を持ちます。

  • . → 任意の1文字(改行以外)
  • * → 直前の文字を0回以上繰り返す
  • + → 直前の文字を1回以上繰り返す
  • ? → 直前の文字が0回または1回
  • [abc] → a、b、cのいずれか1文字
  • [0-9] → 半角数字のいずれか1文字
  • ^ → 行頭
  • $ → 行末
  • \d → 半角数字 / \s → 空白 / \n → 改行
  • (abc) → グループ化、後で $1 で参照

どちらをいつ使う?

用途単純置換正規表現置換
単語→単語の差し替え◎ 最速○ 動くが冗長
表記ゆれ統一(10語)◎ 10セット並べる△ 1パターンずつ
テンプレ差し込み
電話番号のハイフン除去○ ハイフンを空に置換[-‐ー] で揺れも吸収
行頭の番号削除× 不可^[0-9]+\.\s
空行削除○ 改行2連を1連に^\n
日付フォーマット変換× 不可◎ キャプチャグループ
HTML/XMLタグ削除× 困難<[^>]+>

初心者がやりがちな事故 3選

  1. 正規表現置換で . を本物のピリオドのつもりで書く: 株式会社A.B株式会社X.Y に置換しようとして 「A.B」とパターンに書くと、「AaB」「A1B」「A_B」など何でも引っかかります。 ピリオドそのものをマッチさせたいときは \. とバックスラッシュで囲む。
  2. * の意味を間違える: name* は「nameという文字列」ではなく「nam + eが0回以上」。 つまり namnamenameee 全てがマッチ。 真意に近いのは name.*name\S*
  3. グループ参照を忘れる: (\d{4})-(\d{2})-(\d{2}) で日付を捕まえた後、 置換側を $2/$3/$1 と書くと「7/15/2026」になります。$1$2 をエディタによっては \1\2 と書くので、使うツールのヘルプ確認を。

単純置換の強みは「事故が起きにくい」

正規表現は強力ですが、書いた本人も意図しないマッチを引き起こします。 単純置換は「書いた通りにしか動かない」ぶん、結果が予想できて事故が起きにくい。 表記ゆれの統一、テンプレ差し込みなど「やることがはっきり決まっている」場面は単純置換の方が安全です。

併用パターン

実務では両方を使い分けるのが現実的。たとえば「HTMLタグを正規表現で剥がしたあと、 残った文字列の表記ゆれを単純置換で揃える」「日付を正規表現で書式変換した後、月名を単純置換で日本語化」など、 それぞれの得意分野を組み合わせます。

手軽屋には正規表現置換ツールはまだありませんが、テキストの前処理として テキスト整形、後処理として テキスト一括置換を組み合わせると、大抵の整形作業はカバーできます。

単純置換を試す