regex_search.hpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /*
  2. *
  3. * Copyright (c) 1998-2002
  4. * John Maddock
  5. *
  6. * Use, modification and distribution are subject to the
  7. * Boost Software License, Version 1.0. (See accompanying file
  8. * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  9. *
  10. */
  11. /*
  12. * LOCATION: see http://www.boost.org for most recent version.
  13. * FILE regex_search.hpp
  14. * VERSION see <boost/version.hpp>
  15. * DESCRIPTION: Provides regex_search implementation.
  16. */
  17. #ifndef BOOST_REGEX_V5_REGEX_SEARCH_HPP
  18. #define BOOST_REGEX_V5_REGEX_SEARCH_HPP
  19. #include <boost/regex/v5/match_results.hpp>
  20. #include <boost/regex/v5/perl_matcher.hpp>
  21. namespace boost{
  22. BOOST_REGEX_MODULE_EXPORT template <class BidiIterator, class Allocator, class charT, class traits>
  23. bool regex_search(BidiIterator first, BidiIterator last,
  24. match_results<BidiIterator, Allocator>& m,
  25. const basic_regex<charT, traits>& e,
  26. match_flag_type flags = match_default)
  27. {
  28. return regex_search(first, last, m, e, flags, first);
  29. }
  30. BOOST_REGEX_MODULE_EXPORT template <class BidiIterator, class Allocator, class charT, class traits>
  31. bool regex_search(BidiIterator first, BidiIterator last,
  32. match_results<BidiIterator, Allocator>& m,
  33. const basic_regex<charT, traits>& e,
  34. match_flag_type flags,
  35. BidiIterator base)
  36. {
  37. if(e.flags() & regex_constants::failbit)
  38. return false;
  39. BOOST_REGEX_DETAIL_NS::perl_matcher<BidiIterator, Allocator, traits> matcher(first, last, m, e, flags, base);
  40. return BOOST_REGEX_DETAIL_NS::factory_find(matcher);
  41. }
  42. //
  43. // regex_search convenience interfaces:
  44. //
  45. BOOST_REGEX_MODULE_EXPORT template <class charT, class Allocator, class traits>
  46. inline bool regex_search(const charT* str,
  47. match_results<const charT*, Allocator>& m,
  48. const basic_regex<charT, traits>& e,
  49. match_flag_type flags = match_default)
  50. {
  51. return regex_search(str, str + traits::length(str), m, e, flags);
  52. }
  53. BOOST_REGEX_MODULE_EXPORT template <class ST, class SA, class Allocator, class charT, class traits>
  54. inline bool regex_search(const std::basic_string<charT, ST, SA>& s,
  55. match_results<typename std::basic_string<charT, ST, SA>::const_iterator, Allocator>& m,
  56. const basic_regex<charT, traits>& e,
  57. match_flag_type flags = match_default)
  58. {
  59. return regex_search(s.begin(), s.end(), m, e, flags);
  60. }
  61. BOOST_REGEX_MODULE_EXPORT template <class BidiIterator, class charT, class traits>
  62. bool regex_search(BidiIterator first, BidiIterator last,
  63. const basic_regex<charT, traits>& e,
  64. match_flag_type flags = match_default)
  65. {
  66. if(e.flags() & regex_constants::failbit)
  67. return false;
  68. match_results<BidiIterator> m;
  69. typedef typename match_results<BidiIterator>::allocator_type match_alloc_type;
  70. BOOST_REGEX_DETAIL_NS::perl_matcher<BidiIterator, match_alloc_type, traits> matcher(first, last, m, e, flags | regex_constants::match_any, first);
  71. return BOOST_REGEX_DETAIL_NS::factory_find(matcher);
  72. }
  73. BOOST_REGEX_MODULE_EXPORT template <class charT, class traits>
  74. inline bool regex_search(const charT* str,
  75. const basic_regex<charT, traits>& e,
  76. match_flag_type flags = match_default)
  77. {
  78. return regex_search(str, str + traits::length(str), e, flags);
  79. }
  80. BOOST_REGEX_MODULE_EXPORT template <class ST, class SA, class charT, class traits>
  81. inline bool regex_search(const std::basic_string<charT, ST, SA>& s,
  82. const basic_regex<charT, traits>& e,
  83. match_flag_type flags = match_default)
  84. {
  85. return regex_search(s.begin(), s.end(), e, flags);
  86. }
  87. } // namespace boost
  88. #endif // BOOST_REGEX_V5_REGEX_SEARCH_HPP