110 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <regex>10 11// template <class OutputIterator, class BidirectionalIterator,12// class traits, class charT, class ST, class SA>13// OutputIterator14// regex_replace(OutputIterator out,15// BidirectionalIterator first, BidirectionalIterator last,16// const basic_regex<charT, traits>& e,17// const basic_string<charT, ST, SA>& fmt,18// regex_constants::match_flag_type flags =19// regex_constants::match_default);20 21#include <regex>22#include <cassert>23 24#include "test_macros.h"25#include "test_iterators.h"26 27int main(int, char**)28{29 {30 std::regex phone_numbers("\\d{3}-\\d{4}");31 const char phone_book[] = "555-1234, 555-2345, 555-3456";32 typedef cpp17_output_iterator<char*> Out;33 typedef bidirectional_iterator<const char*> Bi;34 char buf[100] = {0};35 Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)),36 Bi(std::end(phone_book)-1), phone_numbers,37 std::string("123-$&"));38 assert(base(r) == buf+40);39 assert(buf == std::string("123-555-1234, 123-555-2345, 123-555-3456"));40 }41 {42 std::regex phone_numbers("\\d{3}-\\d{4}");43 const char phone_book[] = "555-1234, 555-2345, 555-3456";44 typedef cpp17_output_iterator<char*> Out;45 typedef bidirectional_iterator<const char*> Bi;46 char buf[100] = {0};47 Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)),48 Bi(std::end(phone_book)-1), phone_numbers,49 std::string("123-$&"),50 std::regex_constants::format_sed);51 assert(base(r) == buf+43);52 assert(buf == std::string("123-$555-1234, 123-$555-2345, 123-$555-3456"));53 }54 {55 std::regex phone_numbers("\\d{3}-\\d{4}");56 const char phone_book[] = "555-1234, 555-2345, 555-3456";57 typedef cpp17_output_iterator<char*> Out;58 typedef bidirectional_iterator<const char*> Bi;59 char buf[100] = {0};60 Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)),61 Bi(std::end(phone_book)-1), phone_numbers,62 std::string("123-&"),63 std::regex_constants::format_sed);64 assert(base(r) == buf+40);65 assert(buf == std::string("123-555-1234, 123-555-2345, 123-555-3456"));66 }67 {68 std::regex phone_numbers("\\d{3}-\\d{4}");69 const char phone_book[] = "555-1234, 555-2345, 555-3456";70 typedef cpp17_output_iterator<char*> Out;71 typedef bidirectional_iterator<const char*> Bi;72 char buf[100] = {0};73 Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)),74 Bi(std::end(phone_book)-1), phone_numbers,75 std::string("123-$&"),76 std::regex_constants::format_no_copy);77 assert(base(r) == buf+36);78 assert(buf == std::string("123-555-1234123-555-2345123-555-3456"));79 }80 {81 std::regex phone_numbers("\\d{3}-\\d{4}");82 const char phone_book[] = "555-1234, 555-2345, 555-3456";83 typedef cpp17_output_iterator<char*> Out;84 typedef bidirectional_iterator<const char*> Bi;85 char buf[100] = {0};86 Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)),87 Bi(std::end(phone_book)-1), phone_numbers,88 std::string("123-$&"),89 std::regex_constants::format_first_only);90 assert(base(r) == buf+32);91 assert(buf == std::string("123-555-1234, 555-2345, 555-3456"));92 }93 {94 std::regex phone_numbers("\\d{3}-\\d{4}");95 const char phone_book[] = "555-1234, 555-2345, 555-3456";96 typedef cpp17_output_iterator<char*> Out;97 typedef bidirectional_iterator<const char*> Bi;98 char buf[100] = {0};99 Out r = std::regex_replace(Out(buf), Bi(std::begin(phone_book)),100 Bi(std::end(phone_book)-1), phone_numbers,101 std::string("123-$&"),102 std::regex_constants::format_first_only |103 std::regex_constants::format_no_copy);104 assert(base(r) == buf+12);105 assert(buf == std::string("123-555-1234"));106 }107 108 return 0;109}110