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 23int 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