検索と置換
regexでテキストを変換します
「検索と置換」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。
regex_replace
std::regex_replaceは、パターンに一致するすべての部分を置換文字列で置き換えた新しい文字列を返します。
- 元の文字列は変更されません。
- デフォルトでは、すべてのマッチが置換されます。
#include <iostream>
#include <regex>
int main() {
std::regex p("cat");
std::string s = "the cat and the cat";
std::cout << std::regex_replace(s, p, "dog") << '\n';
return 0;
}数字の置換
パターンを使うと、文字列内のすべての数字をプレースホルダーでマスクするなど、一括編集を簡単に行えます。
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d");
std::string s = "PIN 1234";
std::cout << std::regex_replace(s, p, "*") << '\n';
return 0;
}置換における後方参照
置換文字列に$1、$2、...を使うと、キャプチャしたグループを挿入でき、テキストの順序を入れ替えられます。
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\w+) (\\w+)");
std::string s = "John Smith";
std::cout << std::regex_replace(s, p, "$2 $1") << '\n';
return 0;
}マッチ全体:$&
トークン$&はマッチ全体を表します。見つかったテキストを追加の文字で囲むときに便利です。
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d+");
std::string s = "item 42";
std::cout << std::regex_replace(s, p, "[$&]") << '\n';
return 0;
}最初の1件だけ置換
std::regex_constants::format_first_onlyを渡すと、すべての出現箇所ではなく最初のマッチだけを置換できます。
#include <iostream>
#include <regex>
int main() {
std::regex p("o");
std::string s = "foo boo";
auto out = std::regex_replace(s, p, "0", std::regex_constants::format_first_only);
std::cout << out << '\n';
return 0;
}空白の正規化
よくあるクリーンアップ処理として、連続する空白を1つのスペースにまとめます。
#include <iostream>
#include <regex>
int main() {
std::regex p("\\s+");
std::string s = "too many spaces";
std::cout << std::regex_replace(s, p, " ") << '\n';
return 0;
}マッチの削除
空文字列に置換すると、すべてのマッチを実質的に削除できます。不要な文字の除去に便利です。
#include <iostream>
#include <regex>
int main() {
std::regex p("[^a-zA-Z]");
std::string s = "a1b2c3";
std::cout << std::regex_replace(s, p, "") << '\n';
return 0;
}日付の再フォーマット
日付の各部分をキャプチャし、置換時に順序を入れ替えると、形式を変更できます。
#include <iostream>
#include <regex>
int main() {
std::regex p("(\\d{4})-(\\d{2})-(\\d{2})");
std::string s = "2026-05-30";
std::cout << std::regex_replace(s, p, "$3/$2/$1") << '\n';
return 0;
}一致しないテキストを保持する
デフォルトでは、一致しないテキストもそのままコピーされます。format_no_copyを使うと、置換結果だけを出力し、それ以外を破棄できます。
#include <iostream>
#include <regex>
int main() {
std::regex p("\\d+");
std::string s = "a1b2c3";
auto out = std::regex_replace(s, p, "$&", std::regex_constants::format_no_copy);
std::cout << out << '\n';
return 0;
}単語の伏せ字
選択と置換を組み合わせると、複数の単語を一度に伏せ字にできます。
#include <iostream>
#include <regex>
int main() {
std::regex p("bad|evil");
std::string s = "a bad and evil idea";
std::cout << std::regex_replace(s, p, "***") << '\n';
return 0;
}結果の段階的な構築
regex_replaceは文字列を返すため、1回の呼び出しの結果を次の呼び出しに渡して変換を連鎖させられます。
#include <iostream>
#include <regex>
int main() {
std::string s = " Hello, World ";
s = std::regex_replace(s, std::regex("\\s+"), " ");
s = std::regex_replace(s, std::regex("^ | $"), "");
std::cout << "[" << s << "]\n";
return 0;
}クイックチェック
置換構文について理解度を確認します。
まとめ
regex_replaceを使ったテキストの変換方法を学びました。
- デフォルトではすべてのマッチを置換し、新しい文字列を返す
$1、$2、$&でキャプチャしたグループやマッチ全体を挿入するformat_first_onlyやformat_no_copyなどのフラグ- 呼び出しを連鎖させて複雑なクリーンアップを構築する
次は、正規表現を効率よく使い、よくあるパフォーマンス上の問題を避ける方法を学びます。
よくある質問
「検索と置換」レッスンは無料ですか?
はい。「検索と置換」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。
「検索と置換」で何を学びますか?
regexでテキストを変換します ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C++ Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「検索と置換」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC++ Academyレッスンでコードを書いて実行できますか?
はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。