1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // <regex>
11 
12 // class regex_token_iterator<BidirectionalIterator, charT, traits>
13 
14 // regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
15 //                      const regex_type& re,
16 //                      const std::vector<int>& submatches,
17 //                      regex_constants::match_flag_type m =
18 //                                              regex_constants::match_default);
19 
20 #include <regex>
21 #include <cassert>
22 
main()23 int main()
24 {
25     {
26         std::regex phone_numbers("\\d{3}-(\\d{4})");
27         const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";
28         std::vector<int> v;
29         v.push_back(-1);
30         v.push_back(-1);
31         std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,
32                                      phone_numbers, v);
33         assert(i != std::cregex_token_iterator());
34         assert(i->str() == "start ");
35         ++i;
36         assert(i != std::cregex_token_iterator());
37         assert(i->str() == "start ");
38         ++i;
39         assert(i != std::cregex_token_iterator());
40         assert(i->str() == ", ");
41         ++i;
42         assert(i != std::cregex_token_iterator());
43         assert(i->str() == ", ");
44         ++i;
45         assert(i != std::cregex_token_iterator());
46         assert(i->str() == ", ");
47         ++i;
48         assert(i != std::cregex_token_iterator());
49         assert(i->str() == ", ");
50         ++i;
51         assert(i != std::cregex_token_iterator());
52         assert(i->str() == " end");
53         ++i;
54         assert(i == std::cregex_token_iterator());
55     }
56     {
57         std::regex phone_numbers("\\d{3}-(\\d{4})");
58         const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";
59         std::vector<int> v;
60         v.push_back(-1);
61         v.push_back(0);
62         std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,
63                                      phone_numbers, v);
64         assert(i != std::cregex_token_iterator());
65         assert(i->str() == "start ");
66         ++i;
67         assert(i != std::cregex_token_iterator());
68         assert(i->str() == "555-1234");
69         ++i;
70         assert(i != std::cregex_token_iterator());
71         assert(i->str() == ", ");
72         ++i;
73         assert(i != std::cregex_token_iterator());
74         assert(i->str() == "555-2345");
75         ++i;
76         assert(i != std::cregex_token_iterator());
77         assert(i->str() == ", ");
78         ++i;
79         assert(i != std::cregex_token_iterator());
80         assert(i->str() == "555-3456");
81         ++i;
82         assert(i != std::cregex_token_iterator());
83         assert(i->str() == " end");
84         ++i;
85         assert(i == std::cregex_token_iterator());
86     }
87     {
88         std::regex phone_numbers("\\d{3}-(\\d{4})");
89         const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";
90         std::vector<int> v;
91         v.push_back(-1);
92         v.push_back(0);
93         v.push_back(1);
94         std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,
95                                      phone_numbers, v);
96         assert(i != std::cregex_token_iterator());
97         assert(i->str() == "start ");
98         ++i;
99         assert(i != std::cregex_token_iterator());
100         assert(i->str() == "555-1234");
101         ++i;
102         assert(i != std::cregex_token_iterator());
103         assert(i->str() == "1234");
104         ++i;
105         assert(i != std::cregex_token_iterator());
106         assert(i->str() == ", ");
107         ++i;
108         assert(i != std::cregex_token_iterator());
109         assert(i->str() == "555-2345");
110         ++i;
111         assert(i != std::cregex_token_iterator());
112         assert(i->str() == "2345");
113         ++i;
114         assert(i != std::cregex_token_iterator());
115         assert(i->str() == ", ");
116         ++i;
117         assert(i != std::cregex_token_iterator());
118         assert(i->str() == "555-3456");
119         ++i;
120         assert(i != std::cregex_token_iterator());
121         assert(i->str() == "3456");
122         ++i;
123         assert(i != std::cregex_token_iterator());
124         assert(i->str() == " end");
125         ++i;
126         assert(i == std::cregex_token_iterator());
127     }
128 }
129