1a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant//===----------------------------------------------------------------------===// 2a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// 3a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// The LLVM Compiler Infrastructure 4a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward 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. 7a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// 8a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant//===----------------------------------------------------------------------===// 9a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant 10a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// <regex> 11a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant 12a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// template <class OutputIterator, class BidirectionalIterator, 13a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// class traits, class charT, class ST, class SA> 14a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// OutputIterator 15a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// regex_replace(OutputIterator out, 16a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// BidirectionalIterator first, BidirectionalIterator last, 17a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// const basic_regex<charT, traits>& e, 18a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// const basic_string<charT, ST, SA>& fmt, 19a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// regex_constants::match_flag_type flags = 20a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant// regex_constants::match_default); 21a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant 22a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant#include <regex> 23a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant#include <cassert> 24a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant 2583e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall Clow#include "test_iterators.h" 26a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant 27a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnantint main() 28a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant{ 29a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant { 30a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::regex phone_numbers("\\d{3}-\\d{4}"); 31a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant const char phone_book[] = "555-1234, 555-2345, 555-3456"; 32a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant typedef output_iterator<char*> Out; 33a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant typedef bidirectional_iterator<const char*> Bi; 34a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant char buf[100] = {0}; 35a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)), 36a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant Bi(std::end(phone_book)-1), phone_numbers, 37a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::string("123-$&")); 38a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant assert(r.base() == buf+40); 39a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant assert(buf == std::string("123-555-1234, 123-555-2345, 123-555-3456")); 40a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant } 41a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant { 42a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::regex phone_numbers("\\d{3}-\\d{4}"); 43a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant const char phone_book[] = "555-1234, 555-2345, 555-3456"; 44a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant typedef output_iterator<char*> Out; 45a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant typedef bidirectional_iterator<const char*> Bi; 46a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant char buf[100] = {0}; 47a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)), 48a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant Bi(std::end(phone_book)-1), phone_numbers, 49a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::string("123-$&"), 50a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::regex_constants::format_sed); 51a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant assert(r.base() == buf+43); 52a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant assert(buf == std::string("123-$555-1234, 123-$555-2345, 123-$555-3456")); 53a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant } 54a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant { 55a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::regex phone_numbers("\\d{3}-\\d{4}"); 56a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant const char phone_book[] = "555-1234, 555-2345, 555-3456"; 57a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant typedef output_iterator<char*> Out; 58a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant typedef bidirectional_iterator<const char*> Bi; 59a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant char buf[100] = {0}; 60a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)), 61a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant Bi(std::end(phone_book)-1), phone_numbers, 62a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::string("123-&"), 63a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::regex_constants::format_sed); 64a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant assert(r.base() == buf+40); 65a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant assert(buf == std::string("123-555-1234, 123-555-2345, 123-555-3456")); 66a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant } 67a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant { 68a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::regex phone_numbers("\\d{3}-\\d{4}"); 69a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant const char phone_book[] = "555-1234, 555-2345, 555-3456"; 70a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant typedef output_iterator<char*> Out; 71a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant typedef bidirectional_iterator<const char*> Bi; 72a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant char buf[100] = {0}; 73a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)), 74a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant Bi(std::end(phone_book)-1), phone_numbers, 75a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::string("123-$&"), 76a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::regex_constants::format_no_copy); 77a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant assert(r.base() == buf+36); 78a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant assert(buf == std::string("123-555-1234123-555-2345123-555-3456")); 79a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant } 80a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant { 81a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::regex phone_numbers("\\d{3}-\\d{4}"); 82a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant const char phone_book[] = "555-1234, 555-2345, 555-3456"; 83a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant typedef output_iterator<char*> Out; 84a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant typedef bidirectional_iterator<const char*> Bi; 85a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant char buf[100] = {0}; 86a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)), 87a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant Bi(std::end(phone_book)-1), phone_numbers, 88a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::string("123-$&"), 89a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::regex_constants::format_first_only); 90a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant assert(r.base() == buf+32); 91a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant assert(buf == std::string("123-555-1234, 555-2345, 555-3456")); 92a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant } 93a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant { 94a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::regex phone_numbers("\\d{3}-\\d{4}"); 95a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant const char phone_book[] = "555-1234, 555-2345, 555-3456"; 96a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant typedef output_iterator<char*> Out; 97a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant typedef bidirectional_iterator<const char*> Bi; 98a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant char buf[100] = {0}; 99a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)), 100a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant Bi(std::end(phone_book)-1), phone_numbers, 101a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::string("123-$&"), 102a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::regex_constants::format_first_only | 103a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant std::regex_constants::format_no_copy); 104a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant assert(r.base() == buf+12); 105a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant assert(buf == std::string("123-555-1234")); 106a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant } 107a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant} 108