33 _GLIBCXX_BEGIN_NAMESPACE_VERSION
50 template<
typename _Ch_type>
54 typedef _Ch_type char_type;
55 typedef std::basic_string<char_type> string_type;
56 typedef std::locale locale_type;
57 typedef std::ctype_base::mask char_class_type;
76 length(
const char_type* __p)
77 {
return string_type::traits_type::length(__p); }
87 translate(char_type __c)
const
100 translate_nocase(char_type __c)
const
102 typedef std::ctype<char_type> __ctype_type;
103 const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
104 return __fctyp.tolower(__c);
127 template<
typename _Fwd_iter>
129 transform(_Fwd_iter __first, _Fwd_iter __last)
const
131 typedef std::collate<char_type> __collate_type;
132 const __collate_type& __fclt(use_facet<__collate_type>(_M_locale));
133 string_type __s(__first, __last);
134 return __fclt.transform(__s.data(), __s.data() + __s.size());
151 template<
typename _Fwd_iter>
153 transform_primary(_Fwd_iter __first, _Fwd_iter __last)
const
154 {
return string_type(); }
169 template<
typename _Fwd_iter>
171 lookup_collatename(_Fwd_iter __first, _Fwd_iter __last)
const
172 {
return string_type(); }
213 template<
typename _Fwd_iter>
215 lookup_classname(_Fwd_iter __first, _Fwd_iter __last,
216 bool __icase =
false)
const
232 isctype(_Ch_type __c, char_class_type __f)
const;
245 value(_Ch_type __ch,
int __radix)
const;
259 imbue(locale_type __loc)
271 {
return _M_locale; }
274 locale_type _M_locale;
277 template<
typename _Ch_type>
279 regex_traits<_Ch_type>::
280 isctype(_Ch_type __c, char_class_type __f)
const
282 typedef std::ctype<char_type> __ctype_type;
283 const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
285 if (__fctyp.is(__f, __c))
289 if (__c == __fctyp.widen(
'_'))
291 const char __wb[] =
"w";
292 char_class_type __wt = this->lookup_classname(__wb,
293 __wb +
sizeof(__wb));
299 if (__fctyp.is(std::ctype_base::space, __c))
301 const char __bb[] =
"blank";
302 char_class_type __bt = this->lookup_classname(__bb,
303 __bb +
sizeof(__bb));
311 template<
typename _Ch_type>
313 regex_traits<_Ch_type>::
314 value(_Ch_type __ch,
int __radix)
const
316 std::basic_istringstream<char_type> __is(string_type(1, __ch));
320 else if (__radix == 16)
323 return __is.fail() ? -1 : __v;
334 template<
typename _Ch_type,
typename _Rx_traits = regex_traits<_Ch_type> >
339 typedef _Ch_type value_type;
340 typedef _Rx_traits traits_type;
341 typedef typename traits_type::string_type string_type;
342 typedef regex_constants::syntax_option_type flag_type;
343 typedef typename traits_type::locale_type locale_type;
350 static constexpr flag_type icase = regex_constants::icase;
351 static constexpr flag_type nosubs = regex_constants::nosubs;
352 static constexpr flag_type optimize = regex_constants::optimize;
353 static constexpr flag_type collate = regex_constants::collate;
354 static constexpr flag_type ECMAScript = regex_constants::ECMAScript;
355 static constexpr flag_type basic = regex_constants::basic;
356 static constexpr flag_type extended = regex_constants::extended;
357 static constexpr flag_type awk = regex_constants::awk;
358 static constexpr flag_type grep = regex_constants::grep;
359 static constexpr flag_type egrep = regex_constants::egrep;
368 : _M_flags(ECMAScript),
369 _M_automaton(__detail::__compile<const _Ch_type*, _Rx_traits>(0, 0,
370 _M_traits, _M_flags))
385 basic_regex(
const _Ch_type* __p, flag_type __f = ECMAScript)
387 _M_automaton(__detail::__compile(__p, __p + _Rx_traits::length(__p),
388 _M_traits, _M_flags))
403 basic_regex(
const _Ch_type* __p,
std::size_t __len, flag_type __f)
405 _M_automaton(__detail::__compile(__p, __p + __len, _M_traits, _M_flags))
413 basic_regex(
const basic_regex& __rhs)
414 : _M_flags(__rhs._M_flags), _M_traits(__rhs._M_traits),
415 _M_automaton(__rhs._M_automaton)
423 basic_regex(
const basic_regex&& __rhs) noexcept
424 : _M_flags(__rhs._M_flags), _M_traits(__rhs._M_traits),
425 _M_automaton(std::move(__rhs._M_automaton))
437 template<
typename _Ch_traits,
typename _Ch_alloc>
439 basic_regex(
const std::basic_string<_Ch_type, _Ch_traits,
441 flag_type __f = ECMAScript)
443 _M_automaton(__detail::__compile(__s.begin(), __s.end(),
444 _M_traits, _M_flags))
460 template<
typename _InputIterator>
461 basic_regex(_InputIterator __first, _InputIterator __last,
462 flag_type __f = ECMAScript)
464 _M_automaton(__detail::__compile(__first, __last, _M_traits, _M_flags))
475 basic_regex(initializer_list<_Ch_type> __l,
476 flag_type __f = ECMAScript)
478 _M_automaton(__detail::__compile(__l.begin(), __l.end(),
479 _M_traits, _M_flags))
492 operator=(
const basic_regex& __rhs)
493 {
return this->assign(__rhs); }
499 operator=(basic_regex&& __rhs) noexcept
500 {
return this->assign(std::move(__rhs)); }
510 operator=(
const _Ch_type* __p)
511 {
return this->assign(__p, flags()); }
519 template<
typename _Ch_typeraits,
typename _Alloc>
522 {
return this->assign(__s, flags()); }
531 assign(
const basic_regex& __rhs)
533 basic_regex __tmp(__rhs);
544 assign(basic_regex&& __rhs) noexcept
546 basic_regex __tmp(std::move(__rhs));
565 assign(
const _Ch_type* __p, flag_type __flags = ECMAScript)
566 {
return this->assign(string_type(__p), __flags); }
582 assign(
const _Ch_type* __p,
std::size_t __len, flag_type __flags)
583 {
return this->assign(string_type(__p, __len), __flags); }
596 template<
typename _Ch_typeraits,
typename _Alloc>
599 flag_type __flags = ECMAScript)
601 basic_regex __tmp(__s, __flags);
619 template<
typename _InputIterator>
621 assign(_InputIterator __first, _InputIterator __last,
622 flag_type __flags = ECMAScript)
623 {
return this->assign(string_type(__first, __last), __flags); }
637 assign(initializer_list<_Ch_type> __l, flag_type __flags = ECMAScript)
638 {
return this->assign(__l.begin(), __l.end(), __flags); }
647 {
return _M_automaton->_M_sub_count() - 1; }
664 imbue(locale_type __loc)
665 {
return _M_traits.imbue(__loc); }
673 {
return _M_traits.getloc(); }
682 swap(basic_regex& __rhs)
686 std::swap(_M_automaton, __rhs._M_automaton);
689 #ifdef _GLIBCXX_DEBUG
691 _M_dot(std::ostream& __ostr)
692 { _M_automaton->_M_dot(__ostr); }
695 const __detail::_AutomatonPtr&
696 _M_get_automaton()
const
697 {
return _M_automaton; }
701 _Rx_traits _M_traits;
702 __detail::_AutomatonPtr _M_automaton;
706 typedef basic_regex<char> regex;
708 #ifdef _GLIBCXX_USE_WCHAR_T
710 typedef basic_regex<wchar_t> wregex;
720 template<
typename _Ch_type,
typename _Rx_traits>
722 swap(basic_regex<_Ch_type, _Rx_traits>& __lhs,
723 basic_regex<_Ch_type, _Rx_traits>& __rhs)
724 { __lhs.swap(__rhs); }
740 template<
typename _BiIter>
741 class sub_match :
public std::pair<_BiIter, _BiIter>
743 typedef iterator_traits<_BiIter> __iter_traits;
746 typedef typename __iter_traits::value_type value_type;
747 typedef typename __iter_traits::difference_type difference_type;
748 typedef _BiIter iterator;
749 typedef std::basic_string<value_type> string_type;
753 constexpr sub_match() : matched() { }
760 {
return this->matched ? std::distance(this->first, this->second) : 0; }
772 operator string_type()
const
775 ? string_type(this->first, this->second)
788 ? string_type(this->first, this->second)
802 compare(
const sub_match& __s)
const
803 {
return this->str().compare(__s.str()); }
815 compare(
const string_type& __s)
const
816 {
return this->str().compare(__s); }
828 compare(
const value_type* __s)
const
829 {
return this->str().compare(__s); }
834 typedef sub_match<const char*> csub_match;
837 typedef sub_match<string::const_iterator> ssub_match;
839 #ifdef _GLIBCXX_USE_WCHAR_T
841 typedef sub_match<const wchar_t*> wcsub_match;
844 typedef sub_match<wstring::const_iterator> wssub_match;
855 template<
typename _BiIter>
857 operator==(
const sub_match<_BiIter>& __lhs,
const sub_match<_BiIter>& __rhs)
858 {
return __lhs.compare(__rhs) == 0; }
866 template<
typename _BiIter>
868 operator!=(
const sub_match<_BiIter>& __lhs,
const sub_match<_BiIter>& __rhs)
869 {
return __lhs.compare(__rhs) != 0; }
877 template<
typename _BiIter>
879 operator<(const sub_match<_BiIter>& __lhs,
const sub_match<_BiIter>& __rhs)
880 {
return __lhs.compare(__rhs) < 0; }
888 template<
typename _BiIter>
890 operator<=(const sub_match<_BiIter>& __lhs,
const sub_match<_BiIter>& __rhs)
891 {
return __lhs.compare(__rhs) <= 0; }
899 template<
typename _BiIter>
901 operator>=(
const sub_match<_BiIter>& __lhs,
const sub_match<_BiIter>& __rhs)
902 {
return __lhs.compare(__rhs) >= 0; }
910 template<
typename _BiIter>
912 operator>(
const sub_match<_BiIter>& __lhs,
const sub_match<_BiIter>& __rhs)
913 {
return __lhs.compare(__rhs) > 0; }
916 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
918 typename iterator_traits<_Bi_iter>::value_type,
919 _Ch_traits, _Ch_alloc>;
928 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
930 operator==(
const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
931 const sub_match<_Bi_iter>& __rhs)
932 {
return __rhs.compare(__lhs.c_str()) == 0; }
941 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
943 operator!=(
const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
944 const sub_match<_Bi_iter>& __rhs)
945 {
return !(__lhs == __rhs); }
953 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
955 operator<(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
956 const sub_match<_Bi_iter>& __rhs)
957 {
return __rhs.compare(__lhs.c_str()) > 0; }
965 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
967 operator>(
const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
968 const sub_match<_Bi_iter>& __rhs)
969 {
return __rhs < __lhs; }
977 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
979 operator>=(
const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
980 const sub_match<_Bi_iter>& __rhs)
981 {
return !(__lhs < __rhs); }
989 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
991 operator<=(const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __lhs,
992 const sub_match<_Bi_iter>& __rhs)
993 {
return !(__rhs < __lhs); }
1002 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1005 const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs)
1006 {
return __lhs.compare(__rhs.c_str()) == 0; }
1015 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1018 const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs)
1019 {
return !(__lhs == __rhs); }
1027 template<
typename _Bi_iter,
class _Ch_traits,
class _Ch_alloc>
1029 operator<(const sub_match<_Bi_iter>& __lhs,
1030 const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs)
1031 {
return __lhs.compare(__rhs.c_str()) < 0; }
1039 template<
typename _Bi_iter,
class _Ch_traits,
class _Ch_alloc>
1041 operator>(
const sub_match<_Bi_iter>& __lhs,
1042 const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs)
1043 {
return __rhs < __lhs; }
1051 template<
typename _Bi_iter,
class _Ch_traits,
class _Ch_alloc>
1054 const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs)
1055 {
return !(__lhs < __rhs); }
1063 template<
typename _Bi_iter,
class _Ch_traits,
class _Ch_alloc>
1065 operator<=(const sub_match<_Bi_iter>& __lhs,
1066 const __sub_match_string<_Bi_iter, _Ch_traits, _Ch_alloc>& __rhs)
1067 {
return !(__rhs < __lhs); }
1076 template<
typename _Bi_iter>
1078 operator==(
typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1079 const sub_match<_Bi_iter>& __rhs)
1080 {
return __rhs.compare(__lhs) == 0; }
1089 template<
typename _Bi_iter>
1091 operator!=(
typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1092 const sub_match<_Bi_iter>& __rhs)
1093 {
return !(__lhs == __rhs); }
1101 template<
typename _Bi_iter>
1103 operator<(typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1104 const sub_match<_Bi_iter>& __rhs)
1105 {
return __rhs.compare(__lhs) > 0; }
1113 template<
typename _Bi_iter>
1115 operator>(
typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1116 const sub_match<_Bi_iter>& __rhs)
1117 {
return __rhs < __lhs; }
1125 template<
typename _Bi_iter>
1127 operator>=(
typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1128 const sub_match<_Bi_iter>& __rhs)
1129 {
return !(__lhs < __rhs); }
1137 template<
typename _Bi_iter>
1139 operator<=(typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1140 const sub_match<_Bi_iter>& __rhs)
1141 {
return !(__rhs < __lhs); }
1150 template<
typename _Bi_iter>
1153 typename iterator_traits<_Bi_iter>::value_type
const* __rhs)
1154 {
return __lhs.compare(__rhs) == 0; }
1163 template<
typename _Bi_iter>
1166 typename iterator_traits<_Bi_iter>::value_type
const* __rhs)
1167 {
return !(__lhs == __rhs); }
1175 template<
typename _Bi_iter>
1177 operator<(const sub_match<_Bi_iter>& __lhs,
1178 typename iterator_traits<_Bi_iter>::value_type
const* __rhs)
1179 {
return __lhs.compare(__rhs) < 0; }
1187 template<
typename _Bi_iter>
1189 operator>(
const sub_match<_Bi_iter>& __lhs,
1190 typename iterator_traits<_Bi_iter>::value_type
const* __rhs)
1191 {
return __rhs < __lhs; }
1199 template<
typename _Bi_iter>
1202 typename iterator_traits<_Bi_iter>::value_type
const* __rhs)
1203 {
return !(__lhs < __rhs); }
1211 template<
typename _Bi_iter>
1213 operator<=(const sub_match<_Bi_iter>& __lhs,
1214 typename iterator_traits<_Bi_iter>::value_type
const* __rhs)
1215 {
return !(__rhs < __lhs); }
1224 template<
typename _Bi_iter>
1226 operator==(
typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1227 const sub_match<_Bi_iter>& __rhs)
1229 typedef typename sub_match<_Bi_iter>::string_type string_type;
1230 return __rhs.compare(string_type(1, __lhs)) == 0;
1240 template<
typename _Bi_iter>
1242 operator!=(
typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1243 const sub_match<_Bi_iter>& __rhs)
1244 {
return !(__lhs == __rhs); }
1252 template<
typename _Bi_iter>
1254 operator<(typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1255 const sub_match<_Bi_iter>& __rhs)
1257 typedef typename sub_match<_Bi_iter>::string_type string_type;
1258 return __rhs.compare(string_type(1, __lhs)) > 0;
1267 template<
typename _Bi_iter>
1269 operator>(
typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1270 const sub_match<_Bi_iter>& __rhs)
1271 {
return __rhs < __lhs; }
1279 template<
typename _Bi_iter>
1281 operator>=(
typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1282 const sub_match<_Bi_iter>& __rhs)
1283 {
return !(__lhs < __rhs); }
1291 template<
typename _Bi_iter>
1293 operator<=(typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1294 const sub_match<_Bi_iter>& __rhs)
1295 {
return !(__rhs < __lhs); }
1304 template<
typename _Bi_iter>
1307 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
1309 typedef typename sub_match<_Bi_iter>::string_type string_type;
1310 return __lhs.compare(string_type(1, __rhs)) == 0;
1320 template<
typename _Bi_iter>
1323 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
1324 {
return !(__lhs == __rhs); }
1332 template<
typename _Bi_iter>
1334 operator<(const sub_match<_Bi_iter>& __lhs,
1335 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
1337 typedef typename sub_match<_Bi_iter>::string_type string_type;
1338 return __lhs.compare(string_type(1, __rhs)) < 0;
1347 template<
typename _Bi_iter>
1349 operator>(
const sub_match<_Bi_iter>& __lhs,
1350 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
1351 {
return __rhs < __lhs; }
1359 template<
typename _Bi_iter>
1362 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
1363 {
return !(__lhs < __rhs); }
1371 template<
typename _Bi_iter>
1373 operator<=(const sub_match<_Bi_iter>& __lhs,
1374 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
1375 {
return !(__rhs < __lhs); }
1385 template<
typename _Ch_type,
typename _Ch_traits,
typename _Bi_iter>
1387 basic_ostream<_Ch_type, _Ch_traits>&
1388 operator<<(basic_ostream<_Ch_type, _Ch_traits>& __os,
1389 const sub_match<_Bi_iter>& __m)
1390 {
return __os << __m.str(); }
1397 template<
typename _Bi_iter>
1398 inline const sub_match<_Bi_iter>&
1401 static const sub_match<_Bi_iter> __unmatched = sub_match<_Bi_iter>();
1427 template<
typename _Bi_iter,
1428 typename _Alloc = allocator<sub_match<_Bi_iter> > >
1430 :
private std::vector<sub_match<_Bi_iter>, _Alloc>
1444 typedef std::vector<sub_match<_Bi_iter>, _Alloc> _Base_type;
1445 typedef std::iterator_traits<_Bi_iter> __iter_traits;
1446 typedef regex_constants::match_flag_type match_flag_type;
1453 typedef _Alloc allocator_type;
1454 typedef sub_match<_Bi_iter> value_type;
1455 typedef const value_type& const_reference;
1456 typedef const_reference reference;
1457 typedef typename _Base_type::const_iterator const_iterator;
1458 typedef const_iterator iterator;
1459 typedef typename __iter_traits::difference_type difference_type;
1460 typedef typename __iter_traits::value_type char_type;
1461 typedef typename allocator_traits<_Alloc>::size_type size_type;
1464 typedef std::basic_string<char_type> string_type;
1478 match_results(
const _Alloc& __a = _Alloc())
1485 match_results(
const match_results& __rhs)
1492 match_results(match_results&& __rhs) noexcept
1493 : _Base_type(std::move(__rhs))
1500 operator=(
const match_results& __rhs)
1502 match_results(__rhs).swap(*
this);
1510 operator=(match_results&& __rhs)
1512 match_results(std::move(__rhs)).swap(*
this);
1530 bool ready()
const {
return !_Base_type::empty(); }
1549 size_type
__size = _Base_type::size();
1550 return (__size && _Base_type::operator[](0).matched) ? __size - 2 : 0;
1555 {
return _Base_type::max_size(); }
1564 {
return size() == 0; }
1582 length(size_type __sub = 0)
const
1583 {
return (*
this)[__sub].length(); }
1599 position(size_type __sub = 0)
const
1601 return __sub < size() ? std::distance(this->prefix().first,
1602 (*
this)[__sub].first) : -1;
1615 str(size_type __sub = 0)
const
1616 {
return (*
this)[__sub].str(); }
1630 operator[](size_type __sub)
const
1633 return __sub < size()
1634 ? _Base_type::operator[](__sub)
1635 : __unmatched_sub<_Bi_iter>();
1651 ? _Base_type::operator[](_Base_type::size() - 2)
1652 : __unmatched_sub<_Bi_iter>();
1668 ? _Base_type::operator[](_Base_type::size() - 1)
1669 : __unmatched_sub<_Bi_iter>();
1677 {
return _Base_type::begin(); }
1684 {
return _Base_type::cbegin(); }
1691 {
return !empty() ? _Base_type::end() - 2 : _Base_type::end(); }
1716 template<
typename _Out_iter>
1718 format(_Out_iter __out,
const char_type* __fmt_first,
1719 const char_type* __fmt_last,
1720 match_flag_type __flags = regex_constants::format_default)
const
1726 template<
typename _Out_iter,
typename _St,
typename _Sa>
1729 match_flag_type __flags = regex_constants::format_default)
const
1731 return format(__out, __fmt.data(), __fmt.data() + __fmt.size(),
1738 template<
typename _Out_iter,
typename _St,
typename _Sa>
1741 match_flag_type __flags = regex_constants::format_default)
const
1744 format(std::back_inserter(__result), __fmt, __flags);
1752 format(
const char_type* __fmt,
1753 match_flag_type __flags = regex_constants::format_default)
const
1755 string_type __result;
1756 format(std::back_inserter(__result),
1757 __fmt + char_traits<char_type>::length(__fmt),
1773 get_allocator()
const
1774 {
return _Base_type::get_allocator(); }
1787 swap(match_results& __that)
1792 friend class __detail::_SpecializedResults<_Bi_iter, _Alloc>;
1795 typedef match_results<const char*> cmatch;
1796 typedef match_results<string::const_iterator> smatch;
1797 #ifdef _GLIBCXX_USE_WCHAR_T
1798 typedef match_results<const wchar_t*> wcmatch;
1799 typedef match_results<wstring::const_iterator> wsmatch;
1808 template<
typename _Bi_iter,
typename _Alloc>
1810 operator==(
const match_results<_Bi_iter, _Alloc>& __m1,
1811 const match_results<_Bi_iter, _Alloc>& __m2)
1813 if (__m1.ready() != __m2.ready())
1817 if (__m1.empty() != __m2.empty())
1821 return __m1.prefix() == __m2.prefix()
1822 && __m1.size() == __m2.size()
1823 && std::equal(__m1.begin(), __m1.end(), __m2.begin())
1824 && __m1.suffix() == __m2.suffix();
1832 template<
typename _Bi_iter,
class _Alloc>
1834 operator!=(
const match_results<_Bi_iter, _Alloc>& __m1,
1835 const match_results<_Bi_iter, _Alloc>& __m2)
1836 {
return !(__m1 == __m2); }
1846 template<
typename _Bi_iter,
typename _Alloc>
1848 swap(match_results<_Bi_iter, _Alloc>& __lhs,
1849 match_results<_Bi_iter, _Alloc>& __rhs)
1850 { __lhs.swap(__rhs); }
1875 template<
typename _Bi_iter,
typename _Alloc,
1876 typename _Ch_type,
typename _Rx_traits>
1878 regex_match(_Bi_iter __s,
1880 match_results<_Bi_iter, _Alloc>& __m,
1881 const basic_regex<_Ch_type, _Rx_traits>& __re,
1882 regex_constants::match_flag_type __flags
1883 = regex_constants::match_default)
1885 __detail::_AutomatonPtr __a = __re._M_get_automaton();
1886 __detail::_Automaton::_SizeT __sz = __a->_M_sub_count();
1887 __detail::_SpecializedCursor<_Bi_iter> __cs(__s, __e);
1888 __detail::_SpecializedResults<_Bi_iter, _Alloc> __r(__sz, __cs, __m);
1889 __detail::_Grep_matcher __matcher(__cs, __r, __a, __flags);
1890 return __m[0].matched;
1907 template<
typename _Bi_iter,
typename _Ch_type,
typename _Rx_traits>
1909 regex_match(_Bi_iter __first, _Bi_iter __last,
1910 const basic_regex<_Ch_type, _Rx_traits>& __re,
1911 regex_constants::match_flag_type __flags
1912 = regex_constants::match_default)
1914 match_results<_Bi_iter> __what;
1915 return regex_match(__first, __last, __what, __re, __flags);
1932 template<
typename _Ch_type,
typename _Alloc,
typename _Rx_traits>
1934 regex_match(
const _Ch_type* __s,
1935 match_results<const _Ch_type*, _Alloc>& __m,
1936 const basic_regex<_Ch_type, _Rx_traits>& __re,
1937 regex_constants::match_flag_type __f
1938 = regex_constants::match_default)
1939 {
return regex_match(__s, __s + _Rx_traits::length(__s), __m, __re, __f); }
1955 template<
typename _Ch_traits,
typename _Ch_alloc,
1956 typename _Alloc,
typename _Ch_type,
typename _Rx_traits>
1960 _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>& __m,
1961 const basic_regex<_Ch_type, _Rx_traits>& __re,
1962 regex_constants::match_flag_type __flags
1963 = regex_constants::match_default)
1964 {
return regex_match(__s.begin(), __s.end(), __m, __re, __flags); }
1979 template<
typename _Ch_type,
class _Rx_traits>
1981 regex_match(
const _Ch_type* __s,
1982 const basic_regex<_Ch_type, _Rx_traits>& __re,
1983 regex_constants::match_flag_type __f
1984 = regex_constants::match_default)
1985 {
return regex_match(__s, __s + _Rx_traits::length(__s), __re, __f); }
2000 template<
typename _Ch_traits,
typename _Str_allocator,
2001 typename _Ch_type,
typename _Rx_traits>
2004 const basic_regex<_Ch_type, _Rx_traits>& __re,
2005 regex_constants::match_flag_type __flags
2006 = regex_constants::match_default)
2007 {
return regex_match(__s.begin(), __s.end(), __re, __flags); }
2025 template<
typename _Bi_iter,
typename _Alloc,
2026 typename _Ch_type,
typename _Rx_traits>
2028 regex_search(_Bi_iter __first, _Bi_iter __last,
2029 match_results<_Bi_iter, _Alloc>& __m,
2030 const basic_regex<_Ch_type, _Rx_traits>& __re,
2031 regex_constants::match_flag_type __flags
2032 = regex_constants::match_default)
2047 template<
typename _Bi_iter,
typename _Ch_type,
typename _Rx_traits>
2049 regex_search(_Bi_iter __first, _Bi_iter __last,
2050 const basic_regex<_Ch_type, _Rx_traits>& __re,
2051 regex_constants::match_flag_type __flags
2052 = regex_constants::match_default)
2054 match_results<_Bi_iter> __what;
2055 return regex_search(__first, __last, __what, __re, __flags);
2071 template<
typename _Ch_type,
class _Alloc,
class _Rx_traits>
2073 regex_search(
const _Ch_type* __s,
2074 match_results<const _Ch_type*, _Alloc>& __m,
2075 const basic_regex<_Ch_type, _Rx_traits>& __e,
2076 regex_constants::match_flag_type __f
2077 = regex_constants::match_default)
2078 {
return regex_search(__s, __s + _Rx_traits::length(__s), __m, __e, __f); }
2091 template<
typename _Ch_type,
typename _Rx_traits>
2093 regex_search(
const _Ch_type* __s,
2094 const basic_regex<_Ch_type, _Rx_traits>& __e,
2095 regex_constants::match_flag_type __f
2096 = regex_constants::match_default)
2097 {
return regex_search(__s, __s + _Rx_traits::length(__s), __e, __f); }
2110 template<
typename _Ch_traits,
typename _String_allocator,
2111 typename _Ch_type,
typename _Rx_traits>
2114 _String_allocator>& __s,
2115 const basic_regex<_Ch_type, _Rx_traits>& __e,
2116 regex_constants::match_flag_type __flags
2117 = regex_constants::match_default)
2118 {
return regex_search(__s.begin(), __s.end(), __e, __flags); }
2132 template<
typename _Ch_traits,
typename _Ch_alloc,
2133 typename _Alloc,
typename _Ch_type,
2134 typename _Rx_traits>
2138 _Ch_traits, _Ch_alloc>::const_iterator, _Alloc>& __m,
2139 const basic_regex<_Ch_type, _Rx_traits>& __e,
2140 regex_constants::match_flag_type __f
2141 = regex_constants::match_default)
2142 {
return regex_search(__s.begin(), __s.end(), __m, __e, __f); }
2159 template<
typename _Out_iter,
typename _Bi_iter,
2160 typename _Rx_traits,
typename _Ch_type>
2162 regex_replace(_Out_iter __out, _Bi_iter __first, _Bi_iter __last,
2163 const basic_regex<_Ch_type, _Rx_traits>& __e,
2165 regex_constants::match_flag_type __flags
2166 = regex_constants::match_default)
2180 template<
typename _Rx_traits,
typename _Ch_type>
2183 const basic_regex<_Ch_type, _Rx_traits>& __e,
2185 regex_constants::match_flag_type __flags
2186 = regex_constants::match_default)
2189 regex_replace(std::back_inserter(__result),
2190 __s.begin(), __s.end(), __e, __fmt, __flags);
2201 template<
typename _Bi_iter,
2202 typename _Ch_type =
typename iterator_traits<_Bi_iter>::value_type,
2203 typename _Rx_traits = regex_traits<_Ch_type> >
2204 class regex_iterator
2207 typedef basic_regex<_Ch_type, _Rx_traits> regex_type;
2208 typedef match_results<_Bi_iter> value_type;
2210 typedef const value_type* pointer;
2211 typedef const value_type& reference;
2212 typedef std::forward_iterator_tag iterator_category;
2231 regex_iterator(_Bi_iter __a, _Bi_iter __b,
const regex_type& __re,
2232 regex_constants::match_flag_type __m
2233 = regex_constants::match_default);
2240 regex_iterator(
const regex_iterator& __rhs);
2247 operator=(
const regex_iterator& __rhs);
2295 const regex_type* pregex;
2296 regex_constants::match_flag_type flags;
2297 match_results<_Bi_iter> match;
2300 typedef regex_iterator<const char*> cregex_iterator;
2301 typedef regex_iterator<string::const_iterator> sregex_iterator;
2302 #ifdef _GLIBCXX_USE_WCHAR_T
2303 typedef regex_iterator<const wchar_t*> wcregex_iterator;
2304 typedef regex_iterator<wstring::const_iterator> wsregex_iterator;
2315 template<
typename _Bi_iter,
2316 typename _Ch_type =
typename iterator_traits<_Bi_iter>::value_type,
2317 typename _Rx_traits = regex_traits<_Ch_type> >
2318 class regex_token_iterator
2321 typedef basic_regex<_Ch_type, _Rx_traits> regex_type;
2322 typedef sub_match<_Bi_iter> value_type;
2324 typedef const value_type* pointer;
2325 typedef const value_type& reference;
2326 typedef std::forward_iterator_tag iterator_category;
2337 regex_token_iterator();
2359 regex_token_iterator(_Bi_iter __a, _Bi_iter __b,
const regex_type& __re,
2361 regex_constants::match_flag_type __m
2362 = regex_constants::match_default);
2376 regex_token_iterator(_Bi_iter __a, _Bi_iter __b,
2377 const regex_type& __re,
2378 const std::vector<int>& __submatches,
2379 regex_constants::match_flag_type __m
2380 = regex_constants::match_default);
2394 template<std::
size_t _Nm>
2395 regex_token_iterator(_Bi_iter __a, _Bi_iter __b,
2396 const regex_type& __re,
2397 const int (&__submatches)[_Nm],
2398 regex_constants::match_flag_type __m
2399 = regex_constants::match_default);
2406 regex_token_iterator(
const regex_token_iterator& __rhs);
2413 regex_token_iterator&
2414 operator=(
const regex_token_iterator& __rhs);
2421 operator==(
const regex_token_iterator& __rhs);
2428 operator!=(
const regex_token_iterator& __rhs);
2448 regex_token_iterator&
2455 regex_token_iterator
2459 typedef regex_iterator<_Bi_iter, _Ch_type, _Rx_traits> position_iterator;
2461 position_iterator __position;
2462 const value_type* __result;
2463 value_type __suffix;
2465 std::vector<int> __subs;
2469 typedef regex_token_iterator<const char*> cregex_token_iterator;
2472 typedef regex_token_iterator<string::const_iterator> sregex_token_iterator;
2474 #ifdef _GLIBCXX_USE_WCHAR_T
2476 typedef regex_token_iterator<const wchar_t*> wcregex_token_iterator;
2479 typedef regex_token_iterator<wstring::const_iterator> wsregex_token_iterator;
2483 _GLIBCXX_END_NAMESPACE_VERSION
bool operator>=(const _Safe_iterator< _IteratorL, _Sequence > &__lhs, const _Safe_iterator< _IteratorR, _Sequence > &__rhs)
Definition: safe_iterator.h:644
bool operator==(const exception_ptr &, const exception_ptr &) _GLIBCXX_USE_NOEXCEPT __attribute__((__pure__))
std::size_t __size(__stack_t __stack)
Definition: profiler_node.h:68
#define _GLIBCXX_DEBUG_ASSERT(_Condition)
Definition: debug.h:61
namespace std _GLIBCXX_VISIBILITY(default)
Definition: auto_ptr.h:36
bool operator>(const _Safe_iterator< _IteratorL, _Sequence > &__lhs, const _Safe_iterator< _IteratorR, _Sequence > &__rhs)
Definition: safe_iterator.h:612
bool operator!=(const exception_ptr &, const exception_ptr &) _GLIBCXX_USE_NOEXCEPT __attribute__((__pure__))
__SIZE_TYPE__ size_t
Definition: stddef.h:212
__PTRDIFF_TYPE__ ptrdiff_t
Definition: stddef.h:147
Definition: basic_string.h:45
void swap(exception_ptr &__lhs, exception_ptr &__rhs)
Definition: exception_ptr.h:160