regex_replace

4104 ワード

Regex_iteratorメソッドでは、正規表現と一致する文字列を置換するためのフォーマット文字列を入力する必要があります.このフォーマットされた文字列は、テーブルのエスケープシーケンスによって、一致するサブ文字列の一部の内容を参照することができる.
エスケープシーケンス
 
$n
n番目に取得された文字列を置き換え、$1は最初の取得グループ、$2は2番目の取得グループを表します.
$&
正規表現全体に一致する文字列($0)
$’
「≪入力文字列|Input String|Essbase_Studio≫」で、正規表現に一致する文字列の左側の部分
$`
入力文字列で、正規表現に一致する文字列の右側の部分
$$
ドル
 
プロトタイプ:std::string regex_replace(inputSequence,Regex,FormateString,[, Flags]);
inputSequenceはCスタイルの文字列であってもよく、
Regexは正規表現です
FormateStringは、一致するサブ文字列を置換する必要があるフォーマット文字列です.
Flagsはオプションのパラメータです
4番目のパラメータは以下のとおりです.
Flag(フラグ)
Expressions(説明)
Format_default
デフォルトでは、モードのすべてのインスタンスを置き換え、一致しないすべてのコンテンツを結果にコピーします.
Format_no_copy
デフォルトでは、置換モードのすべてのインスタンスが、一致しないすべてのコンテンツを結果にコピーしません.
Formate_first_only
モードの最初のインスタンスのみを置換
4番目のパラメータがない場合(つまり4番目のパラメータのデフォルト)の例:
std::regex r("(.*)(.*)");
    const std::string formate = "H1 = $1 and P1 = $2";
    std::string str;
    while(true)
    {
        if(!std::getline(std::cin,str) || str == "q")
        {
            break;
        }else
        {
                std::string result = std::regex_replace(str,r,formate);
                std::cout << result << std::endl;
        }
    }

入力:
HeaderSome text
出力:
H1 = Header and P1 = Some text
4番目のパラメータを書き込むと、
    std::regex r("(.*)(.*)");
    const std::string formate = "H1 = $1 and P1 = $2";
    std::string str;
    while(true)
    {
        if(!std::getline(std::cin,str) || str == "q")
        {
            break;
        }else
        {
            std::string result = std::regex_replace(str,r,formate,std::regex_constants::format_no_copy);
            std::cout << result << std::endl;
        }
        
    }
    return 0;

入力:
HeaderSome text
出力:
H1 = Header and P1 = Some text
これが両者の違いです.
転載先:https://www.cnblogs.com/boost/p/10426496.html