Ada
3.4.3
Fast spec-compliant URL parser
Toggle main menu visibility
Loading...
Searching...
No Matches
url_pattern_regex.cpp
Go to the documentation of this file.
1
#if ADA_INCLUDE_URL_PATTERN
2
3
#include "
ada/url_pattern_regex.h
"
4
5
namespace
ada::url_pattern_regex {
6
7
#ifdef ADA_USE_UNSAFE_STD_REGEX_PROVIDER
8
std::optional<std::regex> std_regex_provider::create_instance(
9
std::string_view pattern,
bool
ignore_case) {
10
// Let flags be an empty string.
11
// If options's ignore case is true then set flags to "vi".
12
// Otherwise set flags to "v"
13
auto
flags = ignore_case
14
? std::regex::icase | std::regex_constants::ECMAScript
15
: std::regex_constants::ECMAScript;
16
try
{
17
return
std::regex(pattern.data(), pattern.size(), flags);
18
}
catch
(
const
std::regex_error& e) {
19
(void)e;
20
ada_log(
"std_regex_provider::create_instance failed:"
, e.what());
21
return
std::nullopt;
22
}
23
}
24
25
std::optional<std::vector<std::optional<std::string>>>
26
std_regex_provider::regex_search(std::string_view input,
27
const
std::regex& pattern) {
28
// Use iterator-based regex_search to avoid string allocation
29
std::match_results<std::string_view::const_iterator> match_result;
30
if
(!std::regex_search(input.begin(), input.end(), match_result, pattern,
31
std::regex_constants::match_any)) {
32
return
std::nullopt;
33
}
34
std::vector<std::optional<std::string>> matches;
35
// If input is empty, let's assume the result will be empty as well.
36
if
(input.empty() || match_result.empty()) {
37
return
matches;
38
}
39
matches.reserve(match_result.size());
40
for
(
size_t
i = 1; i < match_result.size(); ++i) {
41
if
(
auto
entry = match_result[i]; entry.matched) {
42
matches.emplace_back(entry.str());
43
}
44
}
45
return
matches;
46
}
47
48
bool
std_regex_provider::regex_match(std::string_view input,
49
const
std::regex& pattern) {
50
return
std::regex_match(input.begin(), input.end(), pattern);
51
}
52
53
#endif
// ADA_USE_UNSAFE_STD_REGEX_PROVIDER
54
55
}
// namespace ada::url_pattern_regex
56
57
#endif
// ADA_INCLUDE_URL_PATTERN
url_pattern_regex.h