31 namespace std _GLIBCXX_VISIBILITY(default)
33 _GLIBCXX_BEGIN_NAMESPACE_VERSION
34 _GLIBCXX_BEGIN_NAMESPACE_CXX11
35 template<
typename,
typename>
38 template<
typename,
typename>
41 _GLIBCXX_END_NAMESPACE_CXX11
42 _GLIBCXX_END_NAMESPACE_VERSION
46 _GLIBCXX_BEGIN_NAMESPACE_VERSION
48 enum class _RegexExecutorPolicy : int
49 { _S_auto, _S_alternate };
51 template<
typename _BiIter,
typename _Alloc,
52 typename _CharT,
typename _TraitsT,
53 _RegexExecutorPolicy __policy,
56 __regex_algo_impl(_BiIter __s,
62 template<
typename,
typename,
typename,
bool>
65 _GLIBCXX_END_NAMESPACE_VERSION
68 _GLIBCXX_BEGIN_NAMESPACE_VERSION
69 _GLIBCXX_BEGIN_NAMESPACE_CXX11
86 template<
typename _Ch_type>
90 typedef _Ch_type char_type;
96 typedef std::ctype_base::mask _BaseType;
98 unsigned char _M_extended;
99 static constexpr
unsigned char _S_under = 1 << 0;
100 static constexpr
unsigned char _S_valid_mask = 0x1;
102 constexpr _RegexMask(_BaseType __base = 0,
103 unsigned char __extended = 0)
104 : _M_base(__base), _M_extended(__extended)
110 return _RegexMask(_M_base & __other._M_base,
111 _M_extended & __other._M_extended);
117 return _RegexMask(_M_base | __other._M_base,
118 _M_extended | __other._M_extended);
124 return _RegexMask(_M_base ^ __other._M_base,
125 _M_extended ^ __other._M_extended);
130 {
return _RegexMask(~_M_base, ~_M_extended); }
133 operator&=(_RegexMask __other)
134 {
return *
this = (*this) & __other; }
137 operator|=(_RegexMask __other)
138 {
return *
this = (*this) | __other; }
141 operator^=(_RegexMask __other)
142 {
return *
this = (*this) ^ __other; }
145 operator==(_RegexMask __other)
const 147 return (_M_extended & _S_valid_mask)
148 == (__other._M_extended & _S_valid_mask)
149 && _M_base == __other._M_base;
153 operator!=(_RegexMask __other)
const 154 {
return !((*this) == __other); }
158 typedef _RegexMask char_class_type;
178 {
return string_type::traits_type::length(__p); }
204 const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
205 return __fctyp.tolower(__c);
228 template<
typename _Fwd_iter>
233 const __collate_type& __fclt(use_facet<__collate_type>(_M_locale));
234 string_type __s(__first, __last);
235 return __fclt.transform(__s.
data(), __s.
data() + __s.
size());
252 template<
typename _Fwd_iter>
263 const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
266 return this->transform(__s.
data(), __s.
data() + __s.
size());
280 template<
typename _Fwd_iter>
282 lookup_collatename(_Fwd_iter __first, _Fwd_iter __last)
const;
321 template<
typename _Fwd_iter>
323 lookup_classname(_Fwd_iter __first, _Fwd_iter __last,
324 bool __icase =
false)
const;
339 isctype(_Ch_type __c, char_class_type __f)
const;
352 value(_Ch_type __ch,
int __radix)
const;
368 std::swap(_M_locale, __loc);
378 {
return _M_locale; }
381 locale_type _M_locale;
392 template<
typename _Ch_type,
typename _Rx_traits = regex_traits<_Ch_type>>
396 static_assert(is_same<_Ch_type, typename _Rx_traits::char_type>::value,
397 "regex traits class must have the same char_type");
400 typedef _Ch_type value_type;
401 typedef _Rx_traits traits_type;
402 typedef typename traits_type::string_type
string_type;
404 typedef typename traits_type::locale_type
locale_type;
429 : _M_flags(ECMAScript), _M_loc(), _M_automaton(nullptr)
461 flag_type __f = ECMAScript)
488 template<
typename _Ch_traits,
typename _Ch_alloc>
492 flag_type __f = ECMAScript)
493 :
basic_regex(__s.data(), __s.data() + __s.size(), __f)
509 template<
typename _FwdIter>
511 flag_type __f = ECMAScript)
538 {
return this->assign(__rhs); }
545 {
return this->assign(std::move(__rhs)); }
556 {
return this->assign(__p); }
568 {
return this->assign(__l.begin(), __l.end()); }
576 template<
typename _Ch_traits,
typename _Alloc>
579 {
return this->assign(__s); }
622 assign(
const _Ch_type* __p, flag_type __flags = ECMAScript)
623 {
return this->assign(string_type(__p), __flags); }
639 assign(
const _Ch_type* __p, std::size_t __len, flag_type __flags)
640 {
return this->assign(string_type(__p, __len), __flags); }
653 template<
typename _Ch_traits,
typename _Alloc>
656 flag_type __flags = ECMAScript)
675 template<
typename _InputIterator>
677 assign(_InputIterator __first, _InputIterator __last,
678 flag_type __flags = ECMAScript)
679 {
return this->assign(string_type(__first, __last), __flags); }
694 {
return this->assign(__l.begin(), __l.end(), __flags); }
705 return _M_automaton->_M_sub_count() - 1;
726 std::swap(__loc, _M_loc);
727 _M_automaton.reset();
748 std::swap(_M_flags, __rhs._M_flags);
749 std::swap(_M_loc, __rhs._M_loc);
750 std::swap(_M_automaton, __rhs._M_automaton);
753 #ifdef _GLIBCXX_DEBUG 756 { _M_automaton->_M_dot(__ostr); }
762 template<
typename _FwdIter>
763 basic_regex(_FwdIter __first, _FwdIter __last, locale_type __loc,
765 : _M_flags(__f), _M_loc(std::move(__loc)),
766 _M_automaton(__detail::__compile_nfa<_FwdIter, _Rx_traits>(
767 std::move(__first), std::move(__last), _M_loc, _M_flags))
770 template<
typename _Bp,
typename _Ap,
typename _Cp,
typename _Rp,
771 __detail::_RegexExecutorPolicy,
bool>
772 friend bool __detail::
773 #if _GLIBCXX_INLINE_VERSION 780 template<
typename,
typename,
typename,
bool>
785 _AutomatonPtr _M_automaton;
788 #if __cplusplus < 201703L 789 template<
typename _Ch,
typename _Tr>
793 template<
typename _Ch,
typename _Tr>
797 template<
typename _Ch,
typename _Tr>
801 template<
typename _Ch,
typename _Tr>
805 template<
typename _Ch,
typename _Tr>
809 template<
typename _Ch,
typename _Tr>
813 template<
typename _Ch,
typename _Tr>
817 template<
typename _Ch,
typename _Tr>
821 template<
typename _Ch,
typename _Tr>
825 template<
typename _Ch,
typename _Tr>
833 #ifdef _GLIBCXX_USE_WCHAR_T 845 template<
typename _Ch_type,
typename _Rx_traits>
849 { __lhs.
swap(__rhs); }
865 template<
typename _BiIter>
868 typedef iterator_traits<_BiIter> __iter_traits;
871 typedef typename __iter_traits::value_type value_type;
872 typedef typename __iter_traits::difference_type difference_type;
873 typedef _BiIter iterator;
885 {
return this->matched ?
std::distance(this->first, this->second) : 0; }
897 operator string_type()
const 900 ? string_type(this->first, this->second)
913 ? string_type(this->first, this->second)
928 {
return this->str().compare(__s.
str()); }
941 {
return this->str().compare(__s); }
954 {
return this->str().compare(__s); }
964 #ifdef _GLIBCXX_USE_WCHAR_T 980 template<
typename _BiIter>
983 {
return __lhs.
compare(__rhs) == 0; }
991 template<
typename _BiIter>
994 {
return __lhs.
compare(__rhs) != 0; }
1002 template<
typename _BiIter>
1005 {
return __lhs.
compare(__rhs) < 0; }
1013 template<
typename _BiIter>
1016 {
return __lhs.
compare(__rhs) <= 0; }
1024 template<
typename _BiIter>
1027 {
return __lhs.
compare(__rhs) >= 0; }
1035 template<
typename _BiIter>
1038 {
return __lhs.
compare(__rhs) > 0; }
1041 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1043 typename iterator_traits<_Bi_iter>::value_type,
1044 _Ch_traits, _Ch_alloc>;
1053 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1069 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1073 {
return !(__lhs == __rhs); }
1081 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1083 operator<(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
1087 return __rhs.
compare(string_type(__lhs.data(), __lhs.size())) > 0;
1096 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1100 {
return __rhs < __lhs; }
1108 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1112 {
return !(__lhs < __rhs); }
1120 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1122 operator<=(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
1124 {
return !(__rhs < __lhs); }
1133 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1149 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1153 {
return !(__lhs == __rhs); }
1161 template<
typename _Bi_iter,
class _Ch_traits,
class _Ch_alloc>
1163 operator<(const sub_match<_Bi_iter>& __lhs,
1167 return __lhs.
compare(string_type(__rhs.data(), __rhs.size())) < 0;
1176 template<
typename _Bi_iter,
class _Ch_traits,
class _Ch_alloc>
1180 {
return __rhs < __lhs; }
1188 template<
typename _Bi_iter,
class _Ch_traits,
class _Ch_alloc>
1192 {
return !(__lhs < __rhs); }
1200 template<
typename _Bi_iter,
class _Ch_traits,
class _Ch_alloc>
1202 operator<=(const sub_match<_Bi_iter>& __lhs,
1204 {
return !(__rhs < __lhs); }
1213 template<
typename _Bi_iter>
1215 operator==(
typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1217 {
return __rhs.
compare(__lhs) == 0; }
1226 template<
typename _Bi_iter>
1228 operator!=(
typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1230 {
return !(__lhs == __rhs); }
1238 template<
typename _Bi_iter>
1240 operator<(typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1242 {
return __rhs.
compare(__lhs) > 0; }
1250 template<
typename _Bi_iter>
1252 operator>(
typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1254 {
return __rhs < __lhs; }
1262 template<
typename _Bi_iter>
1264 operator>=(
typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1266 {
return !(__lhs < __rhs); }
1274 template<
typename _Bi_iter>
1276 operator<=(typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1278 {
return !(__rhs < __lhs); }
1287 template<
typename _Bi_iter>
1290 typename iterator_traits<_Bi_iter>::value_type
const* __rhs)
1291 {
return __lhs.
compare(__rhs) == 0; }
1300 template<
typename _Bi_iter>
1303 typename iterator_traits<_Bi_iter>::value_type
const* __rhs)
1304 {
return !(__lhs == __rhs); }
1312 template<
typename _Bi_iter>
1314 operator<(const sub_match<_Bi_iter>& __lhs,
1315 typename iterator_traits<_Bi_iter>::value_type
const* __rhs)
1316 {
return __lhs.
compare(__rhs) < 0; }
1324 template<
typename _Bi_iter>
1327 typename iterator_traits<_Bi_iter>::value_type
const* __rhs)
1328 {
return __rhs < __lhs; }
1336 template<
typename _Bi_iter>
1339 typename iterator_traits<_Bi_iter>::value_type
const* __rhs)
1340 {
return !(__lhs < __rhs); }
1348 template<
typename _Bi_iter>
1350 operator<=(const sub_match<_Bi_iter>& __lhs,
1351 typename iterator_traits<_Bi_iter>::value_type
const* __rhs)
1352 {
return !(__rhs < __lhs); }
1361 template<
typename _Bi_iter>
1363 operator==(
typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1367 return __rhs.
compare(string_type(1, __lhs)) == 0;
1377 template<
typename _Bi_iter>
1379 operator!=(
typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1381 {
return !(__lhs == __rhs); }
1389 template<
typename _Bi_iter>
1391 operator<(typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1395 return __rhs.
compare(string_type(1, __lhs)) > 0;
1404 template<
typename _Bi_iter>
1406 operator>(
typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1408 {
return __rhs < __lhs; }
1416 template<
typename _Bi_iter>
1418 operator>=(
typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1420 {
return !(__lhs < __rhs); }
1428 template<
typename _Bi_iter>
1430 operator<=(typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1432 {
return !(__rhs < __lhs); }
1441 template<
typename _Bi_iter>
1444 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
1447 return __lhs.
compare(string_type(1, __rhs)) == 0;
1457 template<
typename _Bi_iter>
1460 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
1461 {
return !(__lhs == __rhs); }
1469 template<
typename _Bi_iter>
1471 operator<(const sub_match<_Bi_iter>& __lhs,
1472 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
1475 return __lhs.
compare(string_type(1, __rhs)) < 0;
1484 template<
typename _Bi_iter>
1487 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
1488 {
return __rhs < __lhs; }
1496 template<
typename _Bi_iter>
1499 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
1500 {
return !(__lhs < __rhs); }
1508 template<
typename _Bi_iter>
1510 operator<=(const sub_match<_Bi_iter>& __lhs,
1511 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
1512 {
return !(__rhs < __lhs); }
1522 template<
typename _Ch_type,
typename _Ch_traits,
typename _Bi_iter>
1525 operator<<(basic_ostream<_Ch_type, _Ch_traits>& __os,
1527 {
return __os << __m.
str(); }
1553 template<
typename _Bi_iter,
1556 :
private std::vector<sub_match<_Bi_iter>, _Alloc>
1576 typedef std::iterator_traits<_Bi_iter> __iter_traits;
1585 typedef const value_type& const_reference;
1586 typedef const_reference reference;
1587 typedef typename _Base_type::const_iterator const_iterator;
1589 typedef typename __iter_traits::difference_type difference_type;
1591 typedef _Alloc allocator_type;
1592 typedef typename __iter_traits::value_type char_type;
1647 bool ready()
const {
return !_Base_type::empty(); }
1665 {
return _Base_type::empty() ? 0 : _Base_type::size() - 3; }
1669 {
return _Base_type::max_size(); }
1678 {
return size() == 0; }
1697 {
return (*
this)[__sub].length(); }
1724 str(size_type __sub = 0)
const 1725 {
return string_type((*
this)[__sub]); }
1741 __glibcxx_assert( ready() );
1742 return __sub < size()
1743 ? _Base_type::operator[](__sub)
1744 : _M_unmatched_sub();
1758 __glibcxx_assert( ready() );
1759 return !empty() ? _M_prefix() : _M_unmatched_sub();
1773 __glibcxx_assert( ready() );
1774 return !empty() ? _M_suffix() : _M_unmatched_sub();
1789 {
return this->
begin(); }
1803 {
return this->
end(); }
1820 template<
typename _Out_iter>
1822 format(_Out_iter __out,
const char_type* __fmt_first,
1823 const char_type* __fmt_last,
1829 template<
typename _Out_iter,
typename _St,
typename _Sa>
1834 return format(__out, __fmt.
data(), __fmt.
data() + __fmt.
size(),
1841 template<
typename _St,
typename _Sa>
1858 string_type __result;
1878 {
return _Base_type::get_allocator(); }
1895 swap(_M_begin, __that._M_begin);
1900 template<
typename,
typename,
typename,
bool>
1903 template<
typename,
typename,
typename>
1906 template<
typename _Bp,
typename _Ap,
typename _Cp,
typename _Rp,
1907 __detail::_RegexExecutorPolicy,
bool>
1908 friend bool __detail::
1909 #if _GLIBCXX_INLINE_VERSION 1917 _M_resize(
unsigned int __size)
1918 { _Base_type::resize(__size + 3); }
1921 _M_unmatched_sub()
const 1922 {
return _Base_type::operator[](_Base_type::size() - 3); }
1926 {
return _Base_type::operator[](_Base_type::size() - 3); }
1930 {
return _Base_type::operator[](_Base_type::size() - 2); }
1934 {
return _Base_type::operator[](_Base_type::size() - 2); }
1938 {
return _Base_type::operator[](_Base_type::size() - 1); }
1942 {
return _Base_type::operator[](_Base_type::size() - 1); }
1949 #ifdef _GLIBCXX_USE_WCHAR_T 1960 template<
typename _Bi_iter,
typename _Alloc>
1984 template<
typename _Bi_iter,
class _Alloc>
1988 {
return !(__m1 == __m2); }
1998 template<
typename _Bi_iter,
typename _Alloc>
2002 { __lhs.
swap(__rhs); }
2004 _GLIBCXX_END_NAMESPACE_CXX11
2027 template<
typename _Bi_iter,
typename _Alloc,
2028 typename _Ch_type,
typename _Rx_traits>
2037 return __detail::__regex_algo_impl<_Bi_iter, _Alloc, _Ch_type, _Rx_traits,
2038 __detail::_RegexExecutorPolicy::_S_auto,
true>
2039 (__s, __e, __m, __re, __flags);
2056 template<
typename _Bi_iter,
typename _Ch_type,
typename _Rx_traits>
2064 return regex_match(__first, __last, __what, __re, __flags);
2081 template<
typename _Ch_type,
typename _Alloc,
typename _Rx_traits>
2088 {
return regex_match(__s, __s + _Rx_traits::length(__s), __m, __re, __f); }
2104 template<
typename _Ch_traits,
typename _Ch_alloc,
2105 typename _Alloc,
typename _Ch_type,
typename _Rx_traits>
2109 _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>& __m,
2118 template<
typename _Ch_traits,
typename _Ch_alloc,
2119 typename _Alloc,
typename _Ch_type,
typename _Rx_traits>
2123 _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>&,
2141 template<
typename _Ch_type,
class _Rx_traits>
2147 {
return regex_match(__s, __s + _Rx_traits::length(__s), __re, __f); }
2162 template<
typename _Ch_traits,
typename _Str_allocator,
2163 typename _Ch_type,
typename _Rx_traits>
2185 template<
typename _Bi_iter,
typename _Alloc,
2186 typename _Ch_type,
typename _Rx_traits>
2194 return __detail::__regex_algo_impl<_Bi_iter, _Alloc, _Ch_type, _Rx_traits,
2195 __detail::_RegexExecutorPolicy::_S_auto,
false>
2196 (__s, __e, __m, __re, __flags);
2210 template<
typename _Bi_iter,
typename _Ch_type,
typename _Rx_traits>
2218 return regex_search(__first, __last, __what, __re, __flags);
2233 template<
typename _Ch_type,
class _Alloc,
class _Rx_traits>
2240 {
return regex_search(__s, __s + _Rx_traits::length(__s), __m, __e, __f); }
2252 template<
typename _Ch_type,
typename _Rx_traits>
2258 {
return regex_search(__s, __s + _Rx_traits::length(__s), __e, __f); }
2270 template<
typename _Ch_traits,
typename _String_allocator,
2271 typename _Ch_type,
typename _Rx_traits>
2274 _String_allocator>& __s,
2278 {
return regex_search(__s.begin(), __s.end(), __e, __flags); }
2292 template<
typename _Ch_traits,
typename _Ch_alloc,
2293 typename _Alloc,
typename _Ch_type,
2294 typename _Rx_traits>
2298 _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>& __m,
2307 template<
typename _Ch_traits,
typename _Ch_alloc,
2308 typename _Alloc,
typename _Ch_type,
2309 typename _Rx_traits>
2313 _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>&,
2332 template<
typename _Out_iter,
typename _Bi_iter,
2333 typename _Rx_traits,
typename _Ch_type,
2334 typename _St,
typename _Sa>
2358 template<
typename _Out_iter,
typename _Bi_iter,
2359 typename _Rx_traits,
typename _Ch_type>
2361 regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
2363 const _Ch_type* __fmt,
2378 template<
typename _Rx_traits,
typename _Ch_type,
2379 typename _St,
typename _Sa,
typename _Fst,
typename _Fsa>
2389 __s.
begin(), __s.
end(), __e, __fmt, __flags);
2404 template<
typename _Rx_traits,
typename _Ch_type,
2405 typename _St,
typename _Sa>
2409 const _Ch_type* __fmt,
2415 __s.
begin(), __s.
end(), __e, __fmt, __flags);
2430 template<
typename _Rx_traits,
typename _Ch_type,
2431 typename _St,
typename _Sa>
2442 __e, __fmt, __flags);
2457 template<
typename _Rx_traits,
typename _Ch_type>
2461 const _Ch_type* __fmt,
2468 __e, __fmt, __flags);
2474 _GLIBCXX_BEGIN_NAMESPACE_CXX11
2481 template<
typename _Bi_iter,
2482 typename _Ch_type =
typename iterator_traits<_Bi_iter>::value_type,
2489 typedef std::ptrdiff_t difference_type;
2490 typedef const value_type*
pointer;
2491 typedef const value_type& reference;
2512 : _M_begin(__a), _M_end(__b), _M_pregex(&__re), _M_flags(__m), _M_match()
2514 if (!
regex_search(_M_begin, _M_end, _M_match, *_M_pregex, _M_flags))
2545 {
return !(*
this == __rhs); }
2552 {
return _M_match; }
2559 {
return &_M_match; }
2581 const regex_type* _M_pregex;
2588 #ifdef _GLIBCXX_USE_WCHAR_T 2601 template<
typename _Bi_iter,
2602 typename _Ch_type =
typename iterator_traits<_Bi_iter>::value_type,
2609 typedef std::ptrdiff_t difference_type;
2610 typedef const value_type*
pointer;
2611 typedef const value_type& reference;
2623 : _M_position(), _M_subs(), _M_suffix(), _M_n(0), _M_result(nullptr),
2648 : _M_position(__a, __b, __re, __m), _M_subs(1, __submatch), _M_n(0)
2649 { _M_init(__a, __b); }
2661 const regex_type& __re,
2665 : _M_position(__a, __b, __re, __m), _M_subs(__submatches), _M_n(0)
2666 { _M_init(__a, __b); }
2678 const regex_type& __re,
2682 : _M_position(__a, __b, __re, __m), _M_subs(__submatches), _M_n(0)
2683 { _M_init(__a, __b); }
2694 template<std::
size_t _Nm>
2696 const regex_type& __re,
2697 const int (&__submatches)[_Nm],
2700 : _M_position(__a, __b, __re, __m),
2701 _M_subs(__submatches, __submatches + _Nm), _M_n(0)
2702 { _M_init(__a, __b); }
2717 template <std::
size_t _Nm>
2728 : _M_position(__rhs._M_position), _M_subs(__rhs._M_subs),
2729 _M_suffix(__rhs._M_suffix), _M_n(__rhs._M_n), _M_has_m1(__rhs._M_has_m1)
2730 { _M_normalize_result(); }
2750 {
return !(*
this == __rhs); }
2757 {
return *_M_result; }
2764 {
return _M_result; }
2787 _M_init(_Bi_iter __a, _Bi_iter __b);
2790 _M_current_match()
const 2792 if (_M_subs[_M_n] == -1)
2793 return (*_M_position).prefix();
2795 return (*_M_position)[_M_subs[_M_n]];
2799 _M_end_of_seq()
const 2800 {
return _M_result ==
nullptr; }
2804 _M_normalize_result()
2806 if (_M_position != _Position())
2807 _M_result = &_M_current_match();
2809 _M_result = &_M_suffix;
2811 _M_result =
nullptr;
2814 _Position _M_position;
2816 value_type _M_suffix;
2818 const value_type* _M_result;
2830 #ifdef _GLIBCXX_USE_WCHAR_T 2840 _GLIBCXX_END_NAMESPACE_CXX11
2841 _GLIBCXX_END_NAMESPACE_VERSION
basic_string< char_type, _St, _Sa > format(const basic_string< char_type, _St, _Sa > &__fmt, match_flag_type __flags=regex_constants::format_default) const
basic_regex & assign(const _Ch_type *__p, std::size_t __len, flag_type __flags)
Assigns a new regular expression to a regex object from a C-style string containing a regular express...
string_type transform(_Fwd_iter __first, _Fwd_iter __last) const
Gets a sort key for a character sequence.
_GLIBCXX17_INLINE constexpr syntax_option_type nosubs
basic_regex & assign(const basic_string< _Ch_type, _Ch_traits, _Alloc > &__s, flag_type __flags=ECMAScript)
Assigns a new regular expression to a regex object from a string containing a regular expression patt...
int compare(const value_type *__s) const
Compares this sub_match to a C-style string.
locale_type getloc() const
Gets a copy of the current locale in use by the regex_traits object.
basic_regex(const _Ch_type *__p, flag_type __f=ECMAScript)
Constructs a basic regular expression from the sequence [__p, __p + char_traits<_Ch_type>::length(__p...
_GLIBCXX17_INLINE constexpr syntax_option_type grep
basic_regex & operator=(initializer_list< _Ch_type > __l)
Replaces a regular expression with a new one constructed from an initializer list.
regex_token_iterator()
Default constructs a regex_token_iterator.
static std::size_t length(const char_type *__p)
Gives the length of a C-style string starting at __p.
The results of a match or search operation.
constexpr const _Tp * end(initializer_list< _Tp > __ils) noexcept
Return an iterator pointing to one past the last element of the initializer_list. ...
match_results(const _Alloc &__a=_Alloc())
Constructs a default match_results container.
const value_type * operator->() const
Selects a regex_iterator member.
size_type max_size() const
Gets the number of matches and submatches.
basic_regex(const std::basic_string< _Ch_type, _Ch_traits, _Ch_alloc > &__s, flag_type __f=ECMAScript)
Constructs a basic regular expression from the string s interpreted according to the flags in f...
bool operator==(const match_results< _Bi_iter, _Alloc > &__m1, const match_results< _Bi_iter, _Alloc > &__m2)
Compares two match_results for equality.
basic_regex & assign(initializer_list< _Ch_type > __l, flag_type __flags=ECMAScript)
Assigns a new regular expression to a regex object.
The standard allocator, as per [20.4].
basic_regex & assign(basic_regex &&__rhs) noexcept
The move-assignment operator.
regex_token_iterator< const wchar_t * > wcregex_token_iterator
Token iterator for C-style NULL-terminated wide strings.
constexpr const _Tp * begin(initializer_list< _Tp > __ils) noexcept
Return an iterator pointing to the first element of the initializer_list.
size_type size() const noexcept
bool operator!=(const regex_iterator &__rhs) const
Tests the inequivalence of two regex iterators.
bool operator!=(const regex_token_iterator &__rhs) const
Compares a regex_token_iterator to another for inequality.
bool empty() const
Indicates if the match_results contains no results.
void swap(match_results< _Bi_iter, _Alloc > &__lhs, match_results< _Bi_iter, _Alloc > &__rhs)
Swaps two match results.
sub_match< const char * > csub_match
Standard regex submatch over a C-style null-terminated string.
bool regex_search(_Bi_iter __s, _Bi_iter __e, match_results< _Bi_iter, _Alloc > &__m, const basic_regex< _Ch_type, _Rx_traits > &__re, regex_constants::match_flag_type __flags=regex_constants::match_default)
Describes aspects of a regular expression.
match_flag_type
This is a bitmask type indicating regex matching rules.
_GLIBCXX17_INLINE constexpr syntax_option_type basic
bool regex_match(_Bi_iter __s, _Bi_iter __e, match_results< _Bi_iter, _Alloc > &__m, const basic_regex< _Ch_type, _Rx_traits > &__re, regex_constants::match_flag_type __flags=regex_constants::match_default)
Determines if there is a match between the regular expression e and all of the character sequence [fi...
const_reference operator[](size_type __sub) const
Gets a sub_match reference for the match or submatch.
locale_type imbue(locale_type __loc)
Imbues the regex_traits object with a copy of a new locale.
sub_match< string::const_iterator > ssub_match
Standard regex submatch over a standard string.
bitset< _Nb > operator|(const bitset< _Nb > &__x, const bitset< _Nb > &__y) noexcept
Global bitwise operations on bitsets.
A standard container which offers fixed time access to individual elements in any order...
basic_regex & assign(const basic_regex &__rhs)
the real assignment operator.
Facet for localized string comparison.
_GLIBCXX17_INLINE constexpr syntax_option_type optimize
string_type format(const char_type *__fmt, match_flag_type __flags=regex_constants::format_default) const
bitset< _Nb > operator^(const bitset< _Nb > &__x, const bitset< _Nb > &__y) noexcept
Global bitwise operations on bitsets.
_GLIBCXX17_INLINE constexpr match_flag_type format_default
Struct holding two objects of arbitrary type.
int compare(const string_type &__s) const
Compares this sub_match to a string.
Forward iterators support a superset of input iterator operations.
_GLIBCXX17_INLINE constexpr syntax_option_type awk
regex_token_iterator(_Bi_iter __a, _Bi_iter __b, const regex_type &__re, initializer_list< int > __submatches, regex_constants::match_flag_type __m=regex_constants::match_default)
regex_iterator(_Bi_iter __a, _Bi_iter __b, const regex_type &__re, regex_constants::match_flag_type __m=regex_constants::match_default)
~basic_regex()
Destroys a basic regular expression.
A smart pointer with reference-counted copy semantics.
const_iterator end() const
Gets an iterator to one-past-the-end of the collection.
_GLIBCXX17_INLINE constexpr syntax_option_type extended
basic_regex(_FwdIter __first, _FwdIter __last, flag_type __f=ECMAScript)
Constructs a basic regular expression from the range [first, last) interpreted according to the flags...
basic_regex< char > regex
Standard regular expressions.
locale_type getloc() const
Gets the locale currently imbued in the regular expression object.
sub_match< const wchar_t * > wcsub_match
Regex submatch over a C-style null-terminated wide string.
const_reference suffix() const
Gets a sub_match representing the match suffix.
_GLIBCXX17_INLINE constexpr syntax_option_type collate
difference_type length() const
const_iterator begin() const
Gets an iterator to the start of the sub_match collection.
void swap(match_results &__that)
Swaps the contents of two match_results.
basic_regex & operator=(const _Ch_type *__p)
Replaces a regular expression with a new one constructed from a C-style null-terminated string...
const _CharT * data() const noexcept
Return const pointer to contents.
bool equal(_IIter1 __first1, _IIter1 __last1, _IIter2 __first2, _IIter2 __last2, _BinaryPredicate __binary_pred)
Tests a range for element-wise equality.
_GLIBCXX17_INLINE constexpr match_flag_type match_default
basic_regex(const _Ch_type *__p, std::size_t __len, flag_type __f=ECMAScript)
Constructs a basic regular expression from the sequence [p, p + len) interpreted according to the fla...
char_type translate_nocase(char_type __c) const
Translates a character into a case-insensitive equivalent.
unsigned int mark_count() const
Gets the number of marked subexpressions within the regular expression.
bitset< _Nb > operator &(const bitset< _Nb > &__x, const bitset< _Nb > &__y) noexcept
Global bitwise operations on bitsets.
regex_traits()
Constructs a default traits object.
allocator_type get_allocator() const
Gets a copy of the allocator.
bool ready() const
Indicates if the match_results is ready.
Takes a regex and an input string and does the matching.
ISO C++ entities toplevel namespace is std.
void swap(basic_regex &__rhs)
Swaps the contents of two regular expression objects.
const _CharT * c_str() const noexcept
Return const pointer to null-terminated contents.
back_insert_iterator< _Container > back_inserter(_Container &__x)
_Out_iter regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last, const basic_regex< _Ch_type, _Rx_traits > &__e, const basic_string< _Ch_type, _St, _Sa > &__fmt, regex_constants::match_flag_type __flags=regex_constants::match_default)
Search for a regular expression within a range for multiple times, and replace the matched parts thro...
basic_regex(initializer_list< _Ch_type > __l, flag_type __f=ECMAScript)
Constructs a basic regular expression from an initializer list.
_GLIBCXX17_CONSTEXPR iterator_traits< _InputIterator >::difference_type distance(_InputIterator __first, _InputIterator __last)
A generalization of pointer arithmetic.
typename _Size< _Alloc, difference_type >::type size_type
The allocator's size type.
basic_regex & operator=(const basic_string< _Ch_type, _Ch_traits, _Alloc > &__s)
Replaces a regular expression with a new one constructed from a string.
regex_iterator operator++(int)
Postincrements a regex_iterator.
int compare(const basic_string &__str) const
Compare to a string.
Container class for localization functionality.The locale class is first a class wrapper for C librar...
Basis for explicit traits specializations.
regex_token_iterator operator++(int)
Postincrements a regex_token_iterator.
size_type size() const
Gets the number of matches and submatches.
regex_token_iterator(_Bi_iter __a, _Bi_iter __b, const regex_type &__re, const int(&__submatches)[_Nm], regex_constants::match_flag_type __m=regex_constants::match_default)
size_type size() const noexcept
Returns the number of characters in the string, not including any null-termination.
const_iterator cbegin() const
Gets an iterator to the start of the sub_match collection.
_GLIBCXX17_INLINE constexpr syntax_option_type egrep
basic_regex< wchar_t > wregex
Standard wide-character regular expressions.
const value_type & operator*() const
Dereferences a regex_token_iterator.
difference_type length(size_type __sub=0) const
Gets the length of the indicated submatch.
const_reference prefix() const
Gets a sub_match representing the match prefix.
regex_token_iterator(_Bi_iter __a, _Bi_iter __b, const regex_type &__re, int __submatch=0, regex_constants::match_flag_type __m=regex_constants::match_default)
const value_type & operator*() const
Dereferences a regex_iterator.
int compare(const sub_match &__s) const
Compares this and another matched sequence.
basic_regex & operator=(const basic_regex &__rhs)
Assigns one regular expression to another.
difference_type position(size_type __sub=0) const
Gets the offset of the beginning of the indicated submatch.
basic_regex & assign(const _Ch_type *__p, flag_type __flags=ECMAScript)
Assigns a new regular expression to a regex object from a C-style null-terminated string containing a...
regex_token_iterator< const char * > cregex_token_iterator
Token iterator for C-style NULL-terminated strings.
flag_type flags() const
Gets the flags used to construct the regular expression or in the last call to assign().
_GLIBCXX17_INLINE constexpr syntax_option_type icase
basic_regex & operator=(basic_regex &&__rhs) noexcept
Move-assigns one regular expression to another.
basic_regex & assign(_InputIterator __first, _InputIterator __last, flag_type __flags=ECMAScript)
Assigns a new regular expression to a regex object.
Primary class template ctype facet.This template class defines classification and conversion function...
char_type translate(char_type __c) const
Performs the identity translation.
const_iterator cend() const
Gets an iterator to one-past-the-end of the collection.
regex_token_iterator(const regex_token_iterator &__rhs)
Copy constructs a regex_token_iterator.
string_type str(size_type __sub=0) const
Gets the match or submatch converted to a string type.
syntax_option_type
This is a bitmask type indicating how to interpret the regex.
_Out_iter format(_Out_iter __out, const basic_string< char_type, _St, _Sa > &__fmt, match_flag_type __flags=regex_constants::format_default) const
regex_token_iterator< string::const_iterator > sregex_token_iterator
Token iterator for standard strings.
sub_match< wstring::const_iterator > wssub_match
Regex submatch over a standard wide string.
Managing sequences of characters and character-like objects.
~match_results()
Destroys a match_results object.
const value_type * operator->() const
Selects a regex_token_iterator member.
_GLIBCXX17_INLINE constexpr syntax_option_type ECMAScript
regex_iterator()
Provides a singular iterator, useful for indicating one-past-the-end of a range.
regex_token_iterator(_Bi_iter __a, _Bi_iter __b, const regex_type &__re, const std::vector< int > &__submatches, regex_constants::match_flag_type __m=regex_constants::match_default)
bool operator!=(const match_results< _Bi_iter, _Alloc > &__m1, const match_results< _Bi_iter, _Alloc > &__m2)
Compares two match_results for inequality.
string_type transform_primary(_Fwd_iter __first, _Fwd_iter __last) const
Gets a sort key for a character sequence, independent of case.
regex_token_iterator< wstring::const_iterator > wsregex_token_iterator
Token iterator for standard wide-character strings.
string_type str() const
Gets the matching sequence as a string.
locale_type imbue(locale_type __loc)
Imbues the regular expression object with the given locale.