首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 正則表達式替換完整指南:regex_replace 格式化輸出

     編輯:關於C++

regex_replace 核心用法

boost::regex_replace 依據正則模式替換字串,支援格式化字串 $n 參照子表達式。可選參數控制輸出行為:format_no_copy 僅輸出替換結果,不複製未匹配部分。

電話號碼格式化完整範例

#include <iostream>
#include <string>
#include <boost/regex.hpp>
using namespace std;
using namespace boost;

int main() {
    // 電話號碼模式(同前例)
    std::string phone = "(\\()?(\\d{3})(\\))?([-. ])?(\\d{3})([-. ]?)(\\d{4})";
    boost::regex r(phone);
    
    // 替換格式:$2=區號 $5=前3碼 $7=後4碼,以 . 連接
    std::string fmt("$2.$5.$7");
    
    // 單一號碼替換
    std::string number("(908)555-1800");
    std::cout << regex_replace(number, r, fmt) << std::endl;
    // 輸出: 908.555.1800
    
    // 字串中多處替換
    std::string file("Caroline (201)555-2368 862-55-0123");
    std::cout << boost::regex_replace(file, r, fmt) << std::endl;
    // 輸出: Caroline 201.555.2368 862-55-0123
    
    // 僅輸出替換結果(不複製未匹配部分)
    std::cout << boost::regex_replace(file, r, fmt, 
              boost::regex_constants::format_no_copy) << std::endl;
    // 輸出: 201.555.2368
}

輸出結果

908.555.1800
Caroline 201.555.2368 862-55-0123
201.555.2368

格式化字串語法

語法含義
$n第 n 個子表達式內容 (n=1-9)
$&整個匹配字串
$`匹配前的字串
$'匹配後的字串
$$字面 $ 符號

format 旗標選項

  • format_default:預設,複製未匹配部分 + 替換匹配部分
  • format_no_copy:僅輸出替換結果
  • format_first_only:僅替換第一次匹配
  • format_sed:sed 風格語法(s/pattern/replacement/)

實際應用場景

  1. 資料清洗:統一電話、日期、身分證格式
  2. 模板引擎:簡易變數替換 ${var} → $1
  3. 日誌脫敏:信用卡、手機號碼遮罩
  4. 程式碼重構:批次重命名、API 遷移
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved