Source of learn_regex3.cpp


  1: //learn_regex3.cpp

  3: #include <iostream>
  4: #include <string>
  5: #include <regex> //for regex, smatch
  6: using namespace std;

  8: int main()
  9: {
 10:     cout << boolalpha;

 12:     string data("abc12def345ghi6789jk");
 13:     string pattern("(\\d+)[a-z]+(\\d+)[a-z]+(\\d+)");
 14:     regex r(pattern);
 15:     smatch m;

 17:     cout << string(30,'=') << endl;
 18:     cout << data << endl;
 19:     cout << pattern << endl;

 21:     cout << string(30,'=') << endl;
 22:     cout << regex_search(data, m, r) << endl;
 23:     cout << m.empty() << endl;
 24:     cout << m.str() << endl;
 25:     cout << m.prefix() << endl;
 26:     cout << m.suffix() << endl;
 27:     cout << m.size() << endl;
 28:     cout << m.position() << endl;

 30:     cout << string(30,'=') << endl;
 31:     cout << m[0].matched << " " << m[0] << endl
 32:         << m[1].matched << " " << m.str(1) << " "
 33:         << m.position(1) << " " << m.length(1) << endl
 34:         << m[2].matched << " " << m.str(2) << " "
 35:         << m.position(2) << " " << m.length(2) << endl
 36:         << m[3].matched << " " << m.str(3) << " "
 37:         << m.position(3) << " " << m.length(3) << endl;
 38:     //m[#].str() and m[#].length() also work, but not m[#].position()
 39: }
 40: /*Output:
 41: ==============================
 42: abc12def345ghi6789jk
 43: (\d+)[a-z]+(\d+)[a-z]+(\d+)
 44: ==============================
 45: true
 46: false
 47: 12def345ghi6789
 48: abc
 49: jk
 50: 4
 51: 3
 52: ==============================
 53: true 12def345ghi6789
 54: true 12 3 2
 55: true 345 8 3
 56: true 6789 14 4
 57: */