Open In App

regex_replace in C++ | Replace the match of a string using regex_replace

Last Updated : 04 Sep, 2018
Improve
Improve
Like Article
Like
Save
Share
Report

std::regex_replace() is used to replace all matches in a string,

Syntax:

regex_replace(subject, regex_object, replace_text)

Parameters: It accepts three parameters which are described below:

  1. Subject string as the first parameter.
  2. The regex object as the second parameter.
  3. The string with the replacement text as the third parameter.

Return Value: Function returns a new string with the replacements applied.

  1. $& or $0 is used to insert the whole regex match.
  2. $1, $2, … up to $9 is used to insert the text matched by the first nine capturing groups.
  3. $` (back-tick) is used to insert the string that is left of the match.
  4. $’ (quote) is used to insert the string that is right of the match.
  5. If number of capturing group is less than the requested, then that will be replaced by nothing.

Examples:
Suppose a regex object re(“(geeks)(.*)”) is created and the subject string is: subject(“its all about geeksforgeeks”), you want to replace the match by the content of any capturing group (eg $0, $1, … upto 9).

Example-1:
Replace the match by the content of $1.
Here match is “geeksforgeeks” that will be replaced by $1(“geeks”).
Hence, result “its all about geeks”.

Example-2:
Replace the match by the content of $2.
Here match is “geeksforgeeks” that will be replaced by $2(“forgeeks”).
Hence, result “its all about forgeeks”.

Below is the program to show the working of regex_replace.




// C++ program to show the working
// of regex_replace
#include <bits/stdc++.h>
using namespace std;
  
int main()
{
    string subject("its all about geeksforgeeks");
  
    string result1, result2, result3, result4;
    string result5;
  
    // regex object
    regex re("(geeks)(.*)");
  
    // $2 contains, 2nd capturing group which is (.*) means
    // string after "geeks" which is "forgeeks". hence
    // the match(geeksforgeeks) will be replaced by "forgeeks".
    // so the result1 = "its all about forgeeks"
    result1 = regex_replace(subject, re, "$2");
  
    // similarly $1 contains, 1 st capturing group which is
    // "geeks" so the match(geeksforgeeks) will be replaced
    // by "geeks".so the result2 = "its all about geeks".
    result2 = regex_replace(subject, re, "$1");
  
    // $0 contains the whole match
    // so result3 will remain same.
    result3 = regex_replace(subject, re, "$0");
  
    // $0 and $& contains the whole match
    // so result3 will remain same
    result4 = regex_replace(subject, re, "$&");
  
    // Here number of capturing group
    // is 2 so anything above 2
    // will be replaced by nothing.
    result5 = regex_replace(subject, re, "$6");
  
    cout << result1 << endl << result2 << endl;
    cout << result3 << endl << result4 << endl
         << result5;
  
    return 0;
}


Output:

its all about forgeeks
its all about geeks
its all about geeksforgeeks
its all about geeksforgeeks
its all about


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads