1262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant//===----------------------------------------------------------------------===//
2262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant//
3262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant//                     The LLVM Compiler Infrastructure
4262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant//
8262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant//===----------------------------------------------------------------------===//
9262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant
10262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant// <regex>
11262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant
12262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant// class regex_token_iterator<BidirectionalIterator, charT, traits>
13262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant
14262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant// template <size_t N>
15262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant// regex_token_iterator(BidirectionalIterator a, BidirectionalIterator b,
16262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant//                      const regex_type& re,
17262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant//                      const int (&submatches)[N],
18262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant//                      regex_constants::match_flag_type m =
19262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant//                                              regex_constants::match_default);
20262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant
21262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant#include <regex>
22262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant#include <cassert>
23262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant
24262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnantint main()
25262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant{
26262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant    {
27262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        std::regex phone_numbers("\\d{3}-(\\d{4})");
28262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        const char phone_book[] = "start 555-1234, 555-2345, 555-3456 end";
29262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        const int indices[] = {-1, 0, 1};
3059832523acb4b3d9764bcdeeef1ea56ad690eb0eHoward Hinnant        std::cregex_token_iterator i(std::begin(phone_book), std::end(phone_book)-1,
31262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant                                     phone_numbers, indices);
32262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i != std::cregex_token_iterator());
33262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i->str() == "start ");
34262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        ++i;
35262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i != std::cregex_token_iterator());
36262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i->str() == "555-1234");
37262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        ++i;
38262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i != std::cregex_token_iterator());
39262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i->str() == "1234");
40262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        ++i;
41262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i != std::cregex_token_iterator());
42262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i->str() == ", ");
43262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        ++i;
44262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i != std::cregex_token_iterator());
45262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i->str() == "555-2345");
46262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        ++i;
47262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i != std::cregex_token_iterator());
48262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i->str() == "2345");
49262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        ++i;
50262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i != std::cregex_token_iterator());
51262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i->str() == ", ");
52262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        ++i;
53262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i != std::cregex_token_iterator());
54262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i->str() == "555-3456");
55262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        ++i;
56262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i != std::cregex_token_iterator());
57262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i->str() == "3456");
58262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        ++i;
59262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i != std::cregex_token_iterator());
60262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i->str() == " end");
61262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        ++i;
62262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant        assert(i == std::cregex_token_iterator());
63262b779f1d1635f10b3fdbb28cc45c55d0b3ff42Howard Hinnant    }
64a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant}
65