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 traits, class charT, class ST, class SA, class FST, class FSA>>
13a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant//     basic_string<charT, ST, SA>
14a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant//     regex_replace(const basic_string<charT, ST, SA>& s,
15a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant//                   const basic_regex<charT, traits>& e,
16a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant//                   const basic_string<charT, FST, FSA>& fmt,
17a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant//                   regex_constants::match_flag_type flags =
18a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant//                                              regex_constants::match_default);
19a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant
20a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant#include <regex>
21a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant#include <cassert>
22ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include "test_macros.h"
23a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant
24a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnantint main()
25a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant{
26a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant    {
27a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::regex phone_numbers("\\d{3}-\\d{4}");
28a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::string phone_book("555-1234, 555-2345, 555-3456");
29a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::string r = std::regex_replace(phone_book, phone_numbers,
30a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant                                           std::string("123-$&"));
31a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        assert(r == "123-555-1234, 123-555-2345, 123-555-3456");
32a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant    }
33a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant    {
34a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::regex phone_numbers("\\d{3}-\\d{4}");
35a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::string phone_book("555-1234, 555-2345, 555-3456");
36a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::string r = std::regex_replace(phone_book, phone_numbers,
37a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant                                           std::string("123-$&"),
38a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant                                           std::regex_constants::format_sed);
39a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        assert(r == "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        std::string phone_book("555-1234, 555-2345, 555-3456");
44a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::string r = std::regex_replace(phone_book, phone_numbers,
45a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant                                           std::string("123-&"),
46a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant                                           std::regex_constants::format_sed);
47a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        assert(r == "123-555-1234, 123-555-2345, 123-555-3456");
48a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant    }
49a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant    {
50a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::regex phone_numbers("\\d{3}-\\d{4}");
51a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::string phone_book("555-1234, 555-2345, 555-3456");
52a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::string r = std::regex_replace(phone_book, phone_numbers,
53a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant                                           std::string("123-$&"),
54a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant                                           std::regex_constants::format_no_copy);
55a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        assert(r == "123-555-1234123-555-2345123-555-3456");
56a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant    }
57a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant    {
58a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::regex phone_numbers("\\d{3}-\\d{4}");
59a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::string phone_book("555-1234, 555-2345, 555-3456");
60a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::string r = std::regex_replace(phone_book, phone_numbers,
61a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant                                           std::string("123-$&"),
62a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant                                           std::regex_constants::format_first_only);
63a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        assert(r == "123-555-1234, 555-2345, 555-3456");
64a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant    }
65a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant    {
66a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::regex phone_numbers("\\d{3}-\\d{4}");
67a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::string phone_book("555-1234, 555-2345, 555-3456");
68a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        std::string r = std::regex_replace(phone_book, phone_numbers,
69a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant                                           std::string("123-$&"),
70a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant                                           std::regex_constants::format_first_only |
71a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant                                           std::regex_constants::format_no_copy);
72a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant        assert(r == "123-555-1234");
73a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant    }
74a8d775970841ca062fcd44fb16f7b164ce4f3aaeHoward Hinnant}
75