C++ プログラミング

【C++】正規表現で文字列を置換する:regex_replaceの使い方

競プロなどで文字列の置換が必要な場合があります。C++では複数の方法がありますが、今回は正規表現を使った置換について書きたいと思います。

C++には、正規表現(regex)を使って文字列を検索・置換する機能が標準ライブラリで提供されています。本記事では、その中でも特に便利なregex_replace関数を使って、指定したパターンを置換するサンプルコードを解説します。

📌 サンプルコード

まずはこちらのコードをご覧ください。

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s = "ABCDEFGHIJKABC";

    string ans = "XYZ";
    regex reg{"ABC"};

    string ret = regex_replace(s, reg, ans);
    cout << ret << endl;
}

🔍 このコードでやっていること

このプログラムの目的は、文字列sに含まれる特定のパターン"ABC"をすべて"XYZ"に置き換えることです。

#include <bits/stdc++.h>

このヘッダは、競技プログラミングなどでよく使われる「全ライブラリを一括で読み込む」マクロ的な存在です。regexを含むほとんどの標準ライブラリがこの1行で使えるようになりますが、実務コードでは非推奨です。通常は<regex>と必要なヘッダを明示的に書きましょう。

2. 対象の文字列sを定義

string s = "ABCDEFGHIJKABC";

この文字列には2箇所に"ABC"という部分文字列が含まれています。

3. 置換後の文字列ansと、置換対象の正規表現regを定義

string ans = "XYZ";
regex reg{"ABC"};

ここでは、"ABC"を検索し、見つかった箇所を"XYZ"に置き換えるよう指定しています。

4. regex_replaceで置換実行

string ret = regex_replace(s, reg, ans);

この関数は、文字列sの中からregに一致する部分をすべてansで置換し、新しい文字列retを返します。

5. 出力

cout << ret << endl;

最終的に表示される出力は以下のとおりです:

XYZDEFGHIJKXYZ

最初と最後のABCが、それぞれXYZに置換されていることが確認できます。

仮にABCという文字列が複数存在しても全て置換できています。


🧠 補足:正規表現を活用するメリット

C++のregexは、単純な文字列の一致だけでなく、ワイルドカードや文字種の指定、繰り返しなど高度なパターンマッチが可能です。

たとえば:

regex reg{"A.C"};  // AとCの間に任意の1文字があるパターン

など、柔軟なパターン定義が可能です。


✅ まとめ

  • regex_replaceはC++で正規表現を使った置換処理を行うための便利な関数。
  • 簡単なパターンマッチだけでなく、複雑な文字列操作にも応用可能。
  • 実際のプロダクションコードでは、<bits/stdc++.h>の代わりに必要なヘッダ(例:<regex>)を明示するのがベター。

正規表現は一度慣れるととても強力なツールです。競プロでも、それ以外でも様々な場面で活躍します!!

-C++, プログラミング

Copyright© donguri.pyのblog , 2025 All Rights Reserved.