$regexReplace (正規表現による置換)
最終更新:2026-10-09
$regexReplace (正規表現による置換)
$regexReplace は正規表現でテキストにマッチし、指定した文字列に置換します。パイプライン内で高度なテキストクリーニングを行うツールです。置換文字列では $1・$2 でキャプチャグループを参照でき、抽出して再構築する流れにも使えます。options には i・m・x などのフラグを指定できます。リテラル置換のみの $replaceAll と違い、$regexReplace はパターンで置換します。MongoDB 4.4 で導入されました。null の入力は null を返します。
| カテゴリ | 文字列 |
|---|---|
| MongoDB バージョン | 1.0+ |
| 例の言語 | mongosh(シェル) |
📝 構文
{ $regexReplace: { input: <string-expression>, regex: <pattern>, replacement: <replacement>, options: <options> } }
⚙️ パラメータ
| input | 必須。処理対象の文字列。 |
|---|---|
| regex | 必須。Perl 互換の正規表現パターン文字列。 |
| replacement | 必須。置換文字列。$1/$2 でキャプチャグループを参照します。 |
| options | 任意のフラグ(i、m、x など)。 |
戻り値:置換後の文字列。入力が null の場合は null。
▶ 例
以下のコマンドをローカルの mongosh で実行してください(mongod が起動済みである必要があります):
// $regexReplace: 電話番号の中 4 桁をマスク
db.users.aggregate([
{ $project: { masked: { $regexReplace: { input: '$phone', regex: '(\\d{3})\\d{4}(\\d{4})', replacement: '$1****$2' } } } }
])
出力:
{ "_id": 1, "masked": "138****8000" }
{ "_id": 2, "masked": "139****1234" }
📌 注意事項
- 置換文字列の $1/$2 はキャプチャグループを参照。リテラルの $ はエスケープする
- $replaceAll(リテラル)と違い、$regexReplace はパターンで置換する
- マッチしない場合は入力がそのまま返る
🏷️ 関連タグ
💡 関連ケース
さらなる実践ケースを近日公開予定。
📚 関連チュートリアル
❓ よくある質問
Q置換文字列でキャプチャグループを参照するには?
Aキャプチャグループの順に $1・$2 を使います。
Qマッチしない場合は?
A入力がそのまま返ります。
Q$regexReplace と $replaceAll のどちらを使うべき?
Aパターンが必要なら $regexReplace、単純なリテラル置換なら $replaceAll の方が速いです。