1: //regex_substitution.cpp (based on a Deitel example)
2: //Illustrates use of the regex_replace algorithm.
4: #include <iostream>
5: #include <string>
6: using namespace std;
8: #include "boost/regex.hpp"
9: using boost::regex;
10: using boost::regex_replace;
11: using boost::sregex_token_iterator;
12: using boost::format_first_only;
14: int main()
15: {
16: //Set up a first test string
17: string testString1 = "This sentence ends in 5 stars *****.";
18: cout << "\nFirst original string: " << testString1 << endl;
20: //Replace every * in this first test string with a ^
21: testString1 = regex_replace(testString1, regex("\\*"), "^");
22: cout << "^ substituted for *: " << testString1 << endl;
24: //Next, replace "stars" with "carets" in the first test string
25: testString1 = regex_replace(testString1, regex("stars"), "carets");
26: cout << "\"carets\" substituted for \"stars\": "
27: << testString1 << endl;
29: //Finally, replace every word with "word" in the first test string
30: testString1 = regex_replace(testString1, regex("\\w+"), "word" );
31: cout << "Every word replaced by \"word\": " << testString1 << endl;
33: //Set up a second test string
34: string testString2 = "1, 2, 3, 4, 5, 6, 7, 8";
35: cout << "\nSecond original string: " << testString2 << endl;
37: //Replace the first three digits with "digit" in the 2nd test string
38: string testString2Copy = testString2;
39: for (int i = 0; i < 3; i++ ) //Loop three times
40: testString2Copy = regex_replace(testString2Copy,
41: regex("\\d" ), "digit", format_first_only );
42: cout << "First 3 digits replaced by \"digit\": "
43: << testString2Copy << endl;
45: //Next, split the second test string at the commas
46: cout << "String split at commas [";
48: sregex_token_iterator tokenIterator(testString2.begin(),
49: testString2.end(), regex(",\\s" ), -1 ); //token iterator
50: //The -1 means point at what *doesn't" match the regex.
51: sregex_token_iterator end; //Default iterator acts as terminator value
52: //Analogous to the default constructor for an input stream iterator
54: string output;
55: while (tokenIterator != end) //tokenIterator isn't empty
56: {
57: output += "\"" + *tokenIterator + "\", "; //Add token to output
58: tokenIterator++; //Advance the iterator
59: }
60: //Finally, delete the ", " at the end of output string
61: cout << output.substr(0, output.length() - 2 ) << "]" << endl;
62: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
63: }