sub_match.qbk

来自「Boost provides free peer-reviewed portab」· QBK 代码 · 共 851 行 · 第 1/3 页

QBK
851
字号
[/   Copyright 2006-2007 John Maddock.  Distributed under the Boost Software License, Version 1.0.  (See accompanying file LICENSE_1_0.txt or copy at  http://www.boost.org/LICENSE_1_0.txt).][section:sub_match sub_match]   #include <boost/regex.hpp>Regular expressions are different from many simple pattern-matching algorithms in that as well as finding an overall match they can also produce sub-expression matches: each sub-expression being delimited in the pattern by a pair of parenthesis (...). There has to be some method for reporting sub-expression matches back to the user: this is achieved this by defining a class [match_results] that acts as an indexed collection of sub-expression matches, each sub-expression match being contained in an object of type [sub_match].Objects of type [sub_match] may only be obtained by subscripting an object of type [match_results].Objects of type [sub_match] may be compared to objects of type `std::basic_string`, or `const charT*` or `const charT`.Objects of type [sub_match] may be added to objects of type `std::basic_string`, or `const charT*` or `const charT`, to produce a new `std::basic_string` object.When the marked sub-expression denoted by an object of type [sub_match] participated in a regular expression match then member /matched/ evaluates to /true/, and members /first/ and /second/ denote the range of characters \[first,second) which formed that match. Otherwise /matched/ is /false/, and members /first/ and /second/ contained undefined values.When the marked sub-expression denoted by an object of type [sub_match] was repeated, then the [sub_match] object represents the match obtained by the /last/ repeat.  The complete set of all the captures obtained for all the repeats, may be accessed via the captures() member function (Note: this has serious performance implications, you have to explicitly enable this feature).If an object of type [sub_match] represents sub-expression 0 - that is to say the whole match - then member /matched/ is always /true/, unless a [link boost_regex.partial_matches partial match] was obtained as a result of the flag `match_partial` being passed to a regular expression algorithm, in which case member /matched/ is /false/, and members /first/ and /second/ represent the character range that formed the partial match.   namespace boost{   template <class BidirectionalIterator>   class sub_match;   typedef sub_match<const char*>                    csub_match;   typedef sub_match<const wchar_t*>                 wcsub_match;   typedef sub_match<std::string::const_iterator>    ssub_match;   typedef sub_match<std::wstring::const_iterator>   wssub_match;   template <class BidirectionalIterator>   class sub_match : public std::pair<BidirectionalIterator, BidirectionalIterator>   {   public:      typedef typename iterator_traits<BidirectionalIterator>::value_type       ``[link boost_regex.sub_match.value_type value_type]``;      typedef typename iterator_traits<BidirectionalIterator>::difference_type  ``[link boost_regex.sub_match.diff_type difference_type]``;      typedef          BidirectionalIterator                                    ``[link boost_regex.sub_match.it_type iterator]``;      bool ``[link boost_regex.sub_match.matched matched]``;      difference_type ``[link boost_regex.sub_match.length length]``()const;      ``[link boost_regex.sub_match.cast operator basic_string<value_type>]``()const;      basic_string<value_type> ``[link boost_regex.sub_match.str str]``()const;      int ``[link boost_regex.sub_match.compare1 compare]``(const sub_match& s)const;      int ``[link boost_regex.sub_match.compare2 compare]``(const basic_string<value_type>& s)const;      int ``[link boost_regex.sub_match.compare3 compare]``(const value_type* s)const;   #ifdef BOOST_REGEX_MATCH_EXTRA      typedef implementation-private ``[link boost_regex.sub_match.cap_seq_type capture_sequence_type]``;      const capture_sequence_type& ``[link boost_regex.sub_match.captures captures]``()const;   #endif   };   //   // comparisons to another sub_match:   //   template <class BidirectionalIterator>   bool ``[link boost_regex.sub_match.op_compare1 operator ==]`` (const sub_match<BidirectionalIterator>& lhs,                     const sub_match<BidirectionalIterator>& rhs);   template <class BidirectionalIterator>   bool ``[link boost_regex.sub_match.op_compare2 operator !=]`` (const sub_match<BidirectionalIterator>& lhs,                     const sub_match<BidirectionalIterator>& rhs);   template <class BidirectionalIterator>   bool ``[link boost_regex.sub_match.op_compare3 operator <]`` (const sub_match<BidirectionalIterator>& lhs,                  const sub_match<BidirectionalIterator>& rhs);   template <class BidirectionalIterator>   bool ``[link boost_regex.sub_match.op_compare4 operator <=]`` (const sub_match<BidirectionalIterator>& lhs,                     const sub_match<BidirectionalIterator>& rhs);   template <class BidirectionalIterator>   bool ``[link boost_regex.sub_match.op_compare5 operator >=]`` (const sub_match<BidirectionalIterator>& lhs,                     const sub_match<BidirectionalIterator>& rhs);   template <class BidirectionalIterator>   bool ``[link boost_regex.sub_match.op_compare6 operator >]`` (const sub_match<BidirectionalIterator>& lhs,                  const sub_match<BidirectionalIterator>& rhs);   //   // comparisons to a basic_string:   //   template <class BidirectionalIterator, class traits, class Allocator>    bool ``[link boost_regex.sub_match.op_compare7 operator ==]`` (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,                                              traits,                                              Allocator>& lhs,                     const sub_match<BidirectionalIterator>& rhs);   template <class BidirectionalIterator, class traits, class Allocator>    bool ``[link boost_regex.sub_match.op_compare8 operator != ]``(const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,                                              traits,                                              Allocator>& lhs,                     const sub_match<BidirectionalIterator>& rhs);   template <class BidirectionalIterator, class traits, class Allocator>    bool ``[link boost_regex.sub_match.op_compare9 operator <]`` (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,                                              traits,                                              Allocator>& lhs,                     const sub_match<BidirectionalIterator>& rhs);   template <class BidirectionalIterator, class traits, class Allocator>    bool ``[link boost_regex.sub_match.op_compare10 operator >]`` (const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,                                              traits,                                              Allocator>& lhs,                     const sub_match<BidirectionalIterator>& rhs);   template <class BidirectionalIterator, class traits, class Allocator>    bool ``[link boost_regex.sub_match.op_compare11 operator >= ]``(const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,                                              traits,                                              Allocator>& lhs,                     const sub_match<BidirectionalIterator>& rhs);   template <class BidirectionalIterator, class traits, class Allocator>    bool ``[link boost_regex.sub_match.op_compare12 operator <= ]``(const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,                                              traits,                                              Allocator>& lhs,                     const sub_match<BidirectionalIterator>& rhs);   template <class BidirectionalIterator, class traits, class Allocator>    bool ``[link boost_regex.sub_match.op_compare13 operator == ]``(const sub_match<BidirectionalIterator>& lhs,                     const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,                                              traits,                                              Allocator>& rhs);   template <class BidirectionalIterator, class traits, class Allocator>    bool ``[link boost_regex.sub_match.op_compare14 operator != ]``(const sub_match<BidirectionalIterator>& lhs,                     const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,                                              traits,                                              Allocator>& rhs);   template <class BidirectionalIterator, class traits, class Allocator>    bool ``[link boost_regex.sub_match.op_compare15 operator < ]``(const sub_match<BidirectionalIterator>& lhs,                  const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,                                           traits,                                           Allocator>& rhs);   template <class BidirectionalIterator, class traits, class Allocator>    bool ``[link boost_regex.sub_match.op_compare16 operator > ]``(const sub_match<BidirectionalIterator>& lhs,                  const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,                                           traits,                                           Allocator>& rhs);   template <class BidirectionalIterator, class traits, class Allocator>    bool ``[link boost_regex.sub_match.op_compare17 operator >= ]``(const sub_match<BidirectionalIterator>& lhs,                     const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,                                           traits,                                           Allocator>& rhs);   template <class BidirectionalIterator, class traits, class Allocator>    bool ``[link boost_regex.sub_match.op_compare18 operator <= ]``(const sub_match<BidirectionalIterator>& lhs,                     const std::basic_string<iterator_traits<BidirectionalIterator>::value_type,                                              traits,                                              Allocator>& rhs);   //   // comparisons to a pointer to a character array:   //   template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare19 operator == ]``(typename iterator_traits<BidirectionalIterator>::value_type const* lhs,                      const sub_match<BidirectionalIterator>& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare20 operator != ]``(typename iterator_traits<BidirectionalIterator>::value_type const* lhs,                      const sub_match<BidirectionalIterator>& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare21 operator < ]``(typename iterator_traits<BidirectionalIterator>::value_type const* lhs,                   const sub_match<BidirectionalIterator>& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare22 operator > ]``(typename iterator_traits<BidirectionalIterator>::value_type const* lhs,                   const sub_match<BidirectionalIterator>& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare23 operator >= ]``(typename iterator_traits<BidirectionalIterator>::value_type const* lhs,                      const sub_match<BidirectionalIterator>& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare24 operator <= ]``(typename iterator_traits<BidirectionalIterator>::value_type const* lhs,                      const sub_match<BidirectionalIterator>& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare25 operator == ]``(const sub_match<BidirectionalIterator>& lhs,                      typename iterator_traits<BidirectionalIterator>::value_type const* rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare26 operator != ]``(const sub_match<BidirectionalIterator>& lhs,                      typename iterator_traits<BidirectionalIterator>::value_type const* rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare27 operator < ]``(const sub_match<BidirectionalIterator>& lhs,                   typename iterator_traits<BidirectionalIterator>::value_type const* rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare28 operator > ]``(const sub_match<BidirectionalIterator>& lhs,                   typename iterator_traits<BidirectionalIterator>::value_type const* rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare29 operator >= ]``(const sub_match<BidirectionalIterator>& lhs,                      typename iterator_traits<BidirectionalIterator>::value_type const* rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare30 operator <= ]``(const sub_match<BidirectionalIterator>& lhs,                      typename iterator_traits<BidirectionalIterator>::value_type const* rhs);    //   // comparisons to a single character:   //   template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare31 operator == ]``(typename iterator_traits<BidirectionalIterator>::value_type const& lhs,                      const sub_match<BidirectionalIterator>& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare32 operator != ]``(typename iterator_traits<BidirectionalIterator>::value_type const& lhs,                      const sub_match<BidirectionalIterator>& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare33 operator < ]``(typename iterator_traits<BidirectionalIterator>::value_type const& lhs,                   const sub_match<BidirectionalIterator>& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare34 operator > ]``(typename iterator_traits<BidirectionalIterator>::value_type const& lhs,                   const sub_match<BidirectionalIterator>& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare35 operator >= ]``(typename iterator_traits<BidirectionalIterator>::value_type const& lhs,                      const sub_match<BidirectionalIterator>& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare36 operator <= ]``(typename iterator_traits<BidirectionalIterator>::value_type const& lhs,                      const sub_match<BidirectionalIterator>& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare37 operator == ]``(const sub_match<BidirectionalIterator>& lhs,                      typename iterator_traits<BidirectionalIterator>::value_type const& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare38 operator != ]``(const sub_match<BidirectionalIterator>& lhs,                      typename iterator_traits<BidirectionalIterator>::value_type const& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare39 operator < ]``(const sub_match<BidirectionalIterator>& lhs,                   typename iterator_traits<BidirectionalIterator>::value_type const& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare40 operator > ]``(const sub_match<BidirectionalIterator>& lhs,                   typename iterator_traits<BidirectionalIterator>::value_type const& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare41 operator >= ]``(const sub_match<BidirectionalIterator>& lhs,                      typename iterator_traits<BidirectionalIterator>::value_type const& rhs);    template <class BidirectionalIterator>    bool ``[link boost_regex.sub_match.op_compare42 operator <= ]``(const sub_match<BidirectionalIterator>& lhs,                      typename iterator_traits<BidirectionalIterator>::value_type const& rhs);    //    // addition operators:    //   template <class BidirectionalIterator, class traits, class Allocator>    std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator>       ``[link boost_regex.sub_match.op_add1 operator + ]``(const std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type,                                           traits,                                           Allocator>& s,                   const sub_match<BidirectionalIterator>& m);    template <class BidirectionalIterator, class traits, class Allocator>    std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type, traits, Allocator>      ``[link boost_regex.sub_match.op_add2 operator + ]``(const sub_match<BidirectionalIterator>& m,                   const std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type,                                           traits,                                           Allocator>& s);    template <class BidirectionalIterator>    std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type>       ``[link boost_regex.sub_match.op_add3 operator + ]``(typename iterator_traits<BidirectionalIterator>::value_type const* s,                   const sub_match<BidirectionalIterator>& m);    template <class BidirectionalIterator>    std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type>       ``[link boost_regex.sub_match.op_add4 operator + ]``(const sub_match<BidirectionalIterator>& m,                   typename iterator_traits<BidirectionalIterator>::value_type const * s);   template <class BidirectionalIterator>    std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type>       ``[link boost_regex.sub_match.op_add5 operator + ]``(typename iterator_traits<BidirectionalIterator>::value_type const& s,                   const sub_match<BidirectionalIterator>& m);    template <class BidirectionalIterator>    std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type>       ``[link boost_regex.sub_match.op_add6 operator + ]``(const sub_match<BidirectionalIterator>& m,                   typename iterator_traits<BidirectionalIterator>::value_type const& s);    template <class BidirectionalIterator>    std::basic_string<typename iterator_traits<BidirectionalIterator>::value_type>       ``[link boost_regex.sub_match.op_add7 operator + ]``(const sub_match<BidirectionalIterator>& m1,

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?