1: //greedy_lazy.cpp
3: #include <iostream>
4: using std::cout;
5: using std::endl;
6: using std::boolalpha;
8: #include <string>
9: using std::string;
11: #include <regex>
12: using std::regex;
13: using std::smatch;
15: int main()
16: {
17: cout << boolalpha;
19: smatch m;
21: //First capture captures everything, then "gives back"
22: //the .jpg in order to achieve an overall match.
23: string pattern1("(.+)(\\.jpg)");
24: regex r1(pattern1);
25: string data1("filename.jpg");
26: cout << regex_match(data1, m, r1) << endl;
27: cout << m[0] << "|" << m[1] << "|" << m[2] << "|" << endl;
29: //But note that only the minimal amount is "given back", and
30: //in the following example that's just the final 6.
31: string pattern2("(.*)([0-9]+)");
32: regex r2(pattern2);
33: string data2("Page 266");
34: cout << regex_match(data2, m, r2) << endl;
35: cout << m[0] << "|" << m[1] << "|" << m[2] << "|" << endl;
37: //If we make the first capture "lazy" by adding a ?, then
38: //that capture captures only the minimal amount before turning
39: //things over to the next part of the regex.
40: string pattern3("(.*?)([0-9]+)");
41: regex r3(pattern3);
42: string data3("Page 266");
43: cout << regex_match(data3, m, r3) << endl;
44: cout << m[0] << "|" << m[1] << "|" << m[2] << "|" << endl;
45: }
47: /*Output:
48: true
49: filename.jpg|filename|.jpg|
50: true
51: Page 266|Page 26|6|
52: true
53: Page 266|Page |266|
54: */