15 #ifndef BENCHMARK_RE_H_
16 #define BENCHMARK_RE_H_
22 #if defined(BENCHMARK_HAS_NO_EXCEPTIONS) && defined(HAVE_STD_REGEX) && \
23 (defined(HAVE_GNU_POSIX_REGEX) || defined(HAVE_POSIX_REGEX))
27 #if defined(HAVE_STD_REGEX)
29 #elif defined(HAVE_GNU_POSIX_REGEX)
31 #elif defined(HAVE_POSIX_REGEX)
34 #error No regular expression backend was found!
62 #if defined(HAVE_STD_REGEX)
64 #elif defined(HAVE_POSIX_REGEX) || defined(HAVE_GNU_POSIX_REGEX)
67 #error No regular expression backend implementation available
71 #if defined(HAVE_STD_REGEX)
74 #ifdef BENCHMARK_HAS_NO_EXCEPTIONS
79 re_ = std::regex(spec, std::regex_constants::extended);
81 #ifndef BENCHMARK_HAS_NO_EXCEPTIONS
82 }
catch (
const std::regex_error& e) {
97 return std::regex_search(
str, re_);
102 int ec = regcomp(&re_, spec.c_str(), REG_EXTENDED | REG_NOSUB);
105 size_t needed = regerror(ec, &re_,
nullptr, 0);
106 char* errbuf =
new char[needed];
107 regerror(ec, &re_, errbuf, needed);
112 error->assign(errbuf, needed - 1);
134 return regexec(&re_,
str.c_str(), 0,
nullptr, 0) == 0;
140 #endif // BENCHMARK_RE_H_