31 namespace std _GLIBCXX_VISIBILITY(default)
33 _GLIBCXX_BEGIN_NAMESPACE_VERSION
50 template<
typename _Ch_type>
54 typedef _Ch_type char_type;
57 typedef std::ctype_base::mask char_class_type;
77 {
return string_type::traits_type::length(__p); }
103 const __ctype_type& __fctyp(use_facet<__ctype_type>(_M_locale));
104 return __fctyp.tolower(__c);
127 template<
typename _Fwd_iter>
132 const __collate_type& __fclt(use_facet<__collate_type>(_M_locale));
134 return __fclt.transform(__s.
data(), __s.
data() + __s.
size());
151 template<
typename _Fwd_iter>
169 template<
typename _Fwd_iter>
213 template<
typename _Fwd_iter>
216 bool __icase =
false)
const
232 isctype(_Ch_type __c, char_class_type __f)
const;
245 value(_Ch_type __ch,
int __radix)
const;
261 std::swap(_M_locale, __loc);
271 {
return _M_locale; }
274 locale_type _M_locale;
277 template<
typename _Ch_type>
280 isctype(_Ch_type __c, char_class_type __f)
const
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>
314 value(_Ch_type __ch,
int __radix)
const
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;
343 typedef typename traits_type::locale_type locale_type;
368 : _M_flags(ECMAScript),
369 _M_automaton(__detail::__compile<const _Ch_type*, _Rx_traits>(0, 0,
370 _M_traits, _M_flags))
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))
414 : _M_flags(__rhs._M_flags), _M_traits(__rhs._M_traits),
415 _M_automaton(__rhs._M_automaton)
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>
441 flag_type __f = ECMAScript)
443 _M_automaton(__detail::__compile(__s.
begin(), __s.
end(),
444 _M_traits, _M_flags))
460 template<
typename _InputIterator>
462 flag_type __f = ECMAScript)
464 _M_automaton(__detail::__compile(__first, __last, _M_traits, _M_flags))
476 flag_type __f = ECMAScript)
478 _M_automaton(__detail::__compile(__l.
begin(), __l.
end(),
479 _M_traits, _M_flags))
493 {
return this->
assign(__rhs); }
500 {
return this->
assign(std::move(__rhs)); }
519 template<
typename _Ch_typeraits,
typename _Alloc>
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)
619 template<
typename _InputIterator>
621 assign(_InputIterator __first, _InputIterator __last,
622 flag_type __flags = ECMAScript)
623 {
return this->
assign(string_type(__first, __last), __flags); }
638 {
return this->
assign(__l.begin(), __l.end(), __flags); }
647 {
return _M_automaton->_M_sub_count() - 1; }
665 {
return _M_traits.imbue(__loc); }
673 {
return _M_traits.getloc(); }
684 std::swap(_M_flags, __rhs._M_flags);
685 std::swap(_M_traits, __rhs._M_traits);
686 std::swap(_M_automaton, __rhs._M_automaton);
689 #ifdef _GLIBCXX_DEBUG
692 { _M_automaton->_M_dot(__ostr); }
696 _M_get_automaton()
const
697 {
return _M_automaton; }
701 _Rx_traits _M_traits;
708 #ifdef _GLIBCXX_USE_WCHAR_T
720 template<
typename _Ch_type,
typename _Rx_traits>
724 { __lhs.
swap(__rhs); }
740 template<
typename _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;
839 #ifdef _GLIBCXX_USE_WCHAR_T
855 template<
typename _BiIter>
858 {
return __lhs.
compare(__rhs) == 0; }
866 template<
typename _BiIter>
869 {
return __lhs.
compare(__rhs) != 0; }
877 template<
typename _BiIter>
880 {
return __lhs.
compare(__rhs) < 0; }
888 template<
typename _BiIter>
891 {
return __lhs.
compare(__rhs) <= 0; }
899 template<
typename _BiIter>
902 {
return __lhs.
compare(__rhs) >= 0; }
910 template<
typename _BiIter>
913 {
return __lhs.
compare(__rhs) > 0; }
916 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
917 using __sub_match_string = basic_string<
918 typename iterator_traits<_Bi_iter>::value_type,
919 _Ch_traits, _Ch_alloc>;
928 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
941 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
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,
957 {
return __rhs.
compare(__lhs.c_str()) > 0; }
965 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
969 {
return __rhs < __lhs; }
977 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
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,
993 {
return !(__rhs < __lhs); }
1002 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1015 template<
typename _Bi_iter,
typename _Ch_traits,
typename _Ch_alloc>
1019 {
return !(__lhs == __rhs); }
1027 template<
typename _Bi_iter,
class _Ch_traits,
class _Ch_alloc>
1029 operator<(const sub_match<_Bi_iter>& __lhs,
1031 {
return __lhs.
compare(__rhs.c_str()) < 0; }
1039 template<
typename _Bi_iter,
class _Ch_traits,
class _Ch_alloc>
1043 {
return __rhs < __lhs; }
1051 template<
typename _Bi_iter,
class _Ch_traits,
class _Ch_alloc>
1055 {
return !(__lhs < __rhs); }
1063 template<
typename _Bi_iter,
class _Ch_traits,
class _Ch_alloc>
1065 operator<=(const sub_match<_Bi_iter>& __lhs,
1067 {
return !(__rhs < __lhs); }
1076 template<
typename _Bi_iter>
1078 operator==(
typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1080 {
return __rhs.
compare(__lhs) == 0; }
1089 template<
typename _Bi_iter>
1091 operator!=(
typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1093 {
return !(__lhs == __rhs); }
1101 template<
typename _Bi_iter>
1103 operator<(typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1105 {
return __rhs.
compare(__lhs) > 0; }
1113 template<
typename _Bi_iter>
1115 operator>(
typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1117 {
return __rhs < __lhs; }
1125 template<
typename _Bi_iter>
1127 operator>=(
typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
1129 {
return !(__lhs < __rhs); }
1137 template<
typename _Bi_iter>
1139 operator<=(typename iterator_traits<_Bi_iter>::value_type
const* __lhs,
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>
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,
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,
1244 {
return !(__lhs == __rhs); }
1252 template<
typename _Bi_iter>
1254 operator<(typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
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,
1271 {
return __rhs < __lhs; }
1279 template<
typename _Bi_iter>
1281 operator>=(
typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1283 {
return !(__lhs < __rhs); }
1291 template<
typename _Bi_iter>
1293 operator<=(typename iterator_traits<_Bi_iter>::value_type
const& __lhs,
1295 {
return !(__rhs < __lhs); }
1304 template<
typename _Bi_iter>
1307 typename iterator_traits<_Bi_iter>::value_type
const& __rhs)
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)
1338 return __lhs.
compare(string_type(1, __rhs)) < 0;
1347 template<
typename _Bi_iter>
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,
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>
1445 typedef std::iterator_traits<_Bi_iter> __iter_traits;
1453 typedef _Alloc allocator_type;
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;
1550 return (__size && _Base_type::operator[](0).matched) ? __size - 2 : 0;
1564 {
return size() == 0; }
1583 {
return (*
this)[__sub].length(); }
1602 (*
this)[__sub].first) : -1;
1615 str(size_type __sub = 0)
const
1616 {
return (*
this)[__sub].str(); }
1632 _GLIBCXX_DEBUG_ASSERT(
ready() );
1633 return __sub <
size()
1635 : __unmatched_sub<_Bi_iter>();
1649 _GLIBCXX_DEBUG_ASSERT(
ready() );
1652 : __unmatched_sub<_Bi_iter>();
1666 _GLIBCXX_DEBUG_ASSERT(
ready() );
1669 : __unmatched_sub<_Bi_iter>();
1716 template<
typename _Out_iter>
1718 format(_Out_iter __out,
const char_type* __fmt_first,
1719 const char_type* __fmt_last,
1726 template<
typename _Out_iter,
typename _St,
typename _Sa>
1738 template<
typename _Out_iter,
typename _St,
typename _Sa>
1774 {
return _Base_type::get_allocator(); }
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>
1832 template<
typename _Bi_iter,
class _Alloc>
1836 {
return !(__m1 == __m2); }
1846 template<
typename _Bi_iter,
typename _Alloc>
1850 { __lhs.
swap(__rhs); }
1875 template<
typename _Bi_iter,
typename _Alloc,
1876 typename _Ch_type,
typename _Rx_traits>
1886 __detail::_Automaton::_SizeT __sz = __a->_M_sub_count();
1890 return __m[0].matched;
1907 template<
typename _Bi_iter,
typename _Ch_type,
typename _Rx_traits>
1915 return regex_match(__first, __last, __what, __re, __flags);
1932 template<
typename _Ch_type,
typename _Alloc,
typename _Rx_traits>
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,
1979 template<
typename _Ch_type,
class _Rx_traits>
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>
2025 template<
typename _Bi_iter,
typename _Alloc,
2026 typename _Ch_type,
typename _Rx_traits>
2047 template<
typename _Bi_iter,
typename _Ch_type,
typename _Rx_traits>
2055 return regex_search(__first, __last, __what, __re, __flags);
2071 template<
typename _Ch_type,
class _Alloc,
class _Rx_traits>
2078 {
return regex_search(__s, __s + _Rx_traits::length(__s), __m, __e, __f); }
2091 template<
typename _Ch_type,
typename _Rx_traits>
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,
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,
2159 template<
typename _Out_iter,
typename _Bi_iter,
2160 typename _Rx_traits,
typename _Ch_type>
2180 template<
typename _Rx_traits,
typename _Ch_type>
2181 inline basic_string<_Ch_type>
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> >
2209 typedef std::ptrdiff_t difference_type;
2302 #ifdef _GLIBCXX_USE_WCHAR_T
2315 template<
typename _Bi_iter,
2316 typename _Ch_type =
typename iterator_traits<_Bi_iter>::value_type,
2323 typedef std::ptrdiff_t difference_type;
2394 template<std::
size_t _Nm>
2397 const int (&__submatches)[_Nm],
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
2461 position_iterator __position;
2474 #ifdef _GLIBCXX_USE_WCHAR_T
2483 _GLIBCXX_END_NAMESPACE_VERSION