brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · 193dd61 Raw
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