Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/regex/doc/sub_match.html @ 29

Last change on this file since 29 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

File size: 41.0 KB
Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2<html>
3   <head>
4      <title>Boost.Regex: sub_match</title>
5      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6      <LINK href="../../../boost.css" type="text/css" rel="stylesheet"></head>
7   <body>
8      <P>
9         <TABLE id="Table1" cellSpacing="1" cellPadding="1" width="100%" border="0">
10            <TR>
11               <td vAlign="top" width="300">
12                  <h3><A href="../../../index.htm"><IMG height="86" alt="C++ Boost" src="../../../boost.png" width="277" border="0"></A></h3>
13               </td>
14               <TD width="353">
15                  <H1 align="center">Boost.Regex</H1>
16                  <H2 align="center">sub_match</H2>
17               </TD>
18               <td width="50">
19                  <h3><A href="index.html"><IMG height="45" alt="Boost.Regex Index" src="uarrow.gif" width="43" border="0"></A></h3>
20               </td>
21            </TR>
22         </TABLE>
23      </P>
24      <HR>
25      <H3>Synopsis</H3>
26      <P>#include &lt;<A href="../../../boost/regex.hpp">boost/regex.hpp</A>&gt;
27      </P>
28      <P>Regular expressions are different from many simple pattern-matching algorithms
29         in that as well as finding an overall match they can also produce
30         sub-expression matches: each sub-expression being delimited in the pattern by a
31         pair of parenthesis (...). There has to be some method for reporting
32         sub-expression matches back to the user: this is achieved this by defining a
33         class <I><A href="match_results.html">match_results</A></I> that acts as an
34         indexed collection of sub-expression matches, each sub-expression match being
35         contained in an object of type <I>sub_match</I>
36      .
37      <P>Objects of type <EM>sub_match</EM> may only obtained by subscripting an object
38         of type <EM><A href="match_results.html">match_results</A></EM>
39      .
40      <P>Objects of type <EM>sub_match</EM> may be compared to objects of type <EM>std::basic_string</EM>,
41         or <EM>const charT*</EM> or <EM>const charT</EM>
42      .
43      <P>Objects of type <EM>sub_match</EM> may be added to objects of type <EM>std::basic_string</EM>,
44         or <EM>const charT* </EM>or <EM>const charT</EM>, to produce a new <EM>std::basic_string
45         </EM>
46      object.
47      <P>When the marked sub-expression denoted by an object of type sub_match&lt;&gt; 
48         participated in a regular expression match then member <CODE>matched</CODE> evaluates
49         to true, and members <CODE>first</CODE> and <CODE>second</CODE> denote the
50         range of characters <CODE>[first,second)</CODE> which formed that match.
51         Otherwise <CODE>matched</CODE> is false, and members <CODE>first</CODE> and <CODE>second</CODE>
52         contained undefined values.</P>
53      <P>When the marked sub-expression denoted by an object of type sub_match&lt;&gt; 
54         was repeated, then the sub_match object represents the match obtained by the
55         last repeat.&nbsp; The complete set of all the captures obtained for all the
56         repeats, may be accessed via the captures() member function (Note: this has
57         serious performance implications, you have to explicitly enable this feature).</P>
58      <P>If an object of type <CODE>sub_match&lt;&gt;</CODE> represents sub-expression 0
59         - that is to say the whole match - then member <CODE>matched</CODE> is always
60         true, unless a partial match was obtained as a result of the flag <CODE>match_partial</CODE>
61         being passed to a regular expression algorithm, in which case member <CODE>matched</CODE>
62         is false, and members <CODE>first</CODE> and <CODE>second</CODE> represent the
63         character range that formed the partial match.</P>
64      <PRE>namespace boost{
65
66template &lt;class BidirectionalIterator&gt;
67class sub_match;
68
69typedef sub_match&lt;const char*&gt; csub_match;
70typedef sub_match&lt;const wchar_t*&gt; wcsub_match;
71typedef sub_match&lt;std::string::const_iterator&gt; ssub_match;
72typedef sub_match&lt;std::wstring::const_iterator&gt; wssub_match;
73
74template &lt;class BidirectionalIterator&gt;
75class sub_match : public std::pair&lt;BidirectionalIterator, BidirectionalIterator&gt;
76{
77public:
78   typedef typename iterator_traits&lt;BidirectionalIterator&gt;::value_type       value_type;
79   typedef typename iterator_traits&lt;BidirectionalIterator&gt;::difference_type  difference_type;
80   typedef          BidirectionalIterator                                    iterator;
81
82   bool <A href="#m1" >matched</A>;
83
84   difference_type <A href="#m2" >length</A>()const;
85   operator <A href="#m3" >basic_string</A>&lt;value_type&gt;()const;
86   basic_string&lt;value_type&gt; <A href="#m4" >str</A>()const;
87
88   int <A href="#m5" >compare</A>(const sub_match&amp; s)const;
89   int <A href="#m6" >compare</A>(const basic_string&lt;value_type&gt;&amp; s)const;
90   int <A href="#m7" >compare</A>(const value_type* s)const;
91#ifdef BOOST_REGEX_MATCH_EXTRA
92   typedef implementation-private <A href="#m9">capture_sequence_type</A>;
93   const capture_sequence_type&amp; <A href="#m8" >captures</A>()const;
94#endif
95};
96//
97// comparisons to another sub_match:
98//
99template &lt;class BidirectionalIterator&gt;
100bool <A href="#o11" >operator</A> == (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
101                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
102template &lt;class BidirectionalIterator&gt;
103bool <A href="#o12" >operator</A> != (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
104                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
105template &lt;class BidirectionalIterator&gt;
106bool <A href="#o13" >operator</A> &lt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
107                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
108template &lt;class BidirectionalIterator&gt;
109bool <A href="#o14" >operator</A> &lt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
110                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
111template &lt;class BidirectionalIterator&gt;
112bool <A href="#o15" >operator</A> &gt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
113                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
114template &lt;class BidirectionalIterator&gt;
115bool <A href="#o16" >operator</A> &gt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
116                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
117
118
119//
120// comparisons to a basic_string:
121//
122template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
123bool <A href="#o21" >operator</A> == (const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; lhs,
124                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
125template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
126bool <A href="#o22" >operator</A> != (const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; lhs,
127                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
128template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
129bool <A href="#o23" >operator</A> &lt; (const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; lhs,
130                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
131template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
132bool <A href="#o24" >operator</A> &gt; (const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; lhs,
133                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
134template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
135bool <A href="#o25" >operator</A> &gt;= (const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; lhs,
136                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
137template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
138bool <A href="#o26" >operator</A> &lt;= (const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; lhs,
139                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
140
141template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
142bool <A href="#o31" >operator</A> == (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
143                  const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; rhs);
144template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
145bool <A href="#o32" >operator</A> != (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
146                  const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; rhs);
147template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
148bool <A href="#o33" >operator</A> &lt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
149                 const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; rhs);
150template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
151bool <A href="#o34" >operator</A> &gt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
152                 const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; rhs);
153template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
154bool <A href="#o35" >operator</A> &gt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
155                  const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; rhs);
156template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
157bool <A href="#o36" >operator</A> &lt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
158                  const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; rhs);
159
160//
161// comparisons to a pointer to a character array:
162//
163template &lt;class BidirectionalIterator&gt; 
164bool <A href="#o41" >operator</A> == (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* lhs,
165                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
166template &lt;class BidirectionalIterator&gt; 
167bool <A href="#o42" >operator</A> != (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* lhs,
168                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
169template &lt;class BidirectionalIterator&gt; 
170bool <A href="#o43" >operator</A> &lt; (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* lhs,
171                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
172template &lt;class BidirectionalIterator&gt; 
173bool <A href="#o44" >operator</A> &gt; (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* lhs,
174                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
175template &lt;class BidirectionalIterator&gt; 
176bool <A href="#o45" >operator</A> &gt;= (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* lhs,
177                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
178template &lt;class BidirectionalIterator&gt; 
179bool <A href="#o46" >operator</A> &lt;= (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* lhs,
180                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
181
182template &lt;class BidirectionalIterator&gt; 
183bool <A href="#o51" >operator</A> == (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
184                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* rhs);
185template &lt;class BidirectionalIterator&gt; 
186bool <A href="#o52" >operator</A> != (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
187                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* rhs);
188template &lt;class BidirectionalIterator&gt; 
189bool <A href="#o53" >operator</A> &lt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
190                 typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* rhs);
191template &lt;class BidirectionalIterator&gt; 
192bool <A href="#o54" >operator</A> &gt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
193                 typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* rhs);
194template &lt;class BidirectionalIterator&gt; 
195bool <A href="#o55" >operator</A> &gt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
196                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* rhs);
197template &lt;class BidirectionalIterator&gt; 
198bool <A href="#o56" >operator</A> &lt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
199                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* rhs);
200
201//
202// comparisons to a single character:
203//
204template &lt;class BidirectionalIterator&gt; 
205bool <A href="#o61" >operator</A> == (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; lhs,
206                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
207template &lt;class BidirectionalIterator&gt; 
208bool <A href="#o62" >operator</A> != (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; lhs,
209                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
210template &lt;class BidirectionalIterator&gt; 
211bool <A href="#o63" >operator</A> &lt; (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; lhs,
212                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
213template &lt;class BidirectionalIterator&gt; 
214bool <A href="#o64" >operator</A> &gt; (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; lhs,
215                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
216template &lt;class BidirectionalIterator&gt; 
217bool <A href="#o65" >operator</A> &gt;= (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; lhs,
218                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
219template &lt;class BidirectionalIterator&gt; 
220bool <A href="#o66" >operator</A> &lt;= (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; lhs,
221                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
222
223template &lt;class BidirectionalIterator&gt; 
224bool <A href="#o71" >operator</A> == (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
225                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; rhs);
226template &lt;class BidirectionalIterator&gt; 
227bool <A href="#o72" >operator</A> != (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
228                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; rhs);
229template &lt;class BidirectionalIterator&gt; 
230bool <A href="#o73" >operator</A> &lt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
231                 typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; rhs);
232template &lt;class BidirectionalIterator&gt; 
233bool <A href="#o74" >operator</A> &gt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
234                 typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; rhs);
235template &lt;class BidirectionalIterator&gt; 
236bool <A href="#o75" >operator</A> &gt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
237                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; rhs);
238template &lt;class BidirectionalIterator&gt; 
239bool <A href="#o76" >operator</A> &lt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
240                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; rhs);
241//
242// addition operators:
243//
244template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
245std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt; 
246    <A href="#o81" >operator</A> + (const std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; s,
247                const sub_match&lt;BidirectionalIterator&gt;&amp; m);
248template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
249std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;
250    <A href="#o82" >operator</A> + (const sub_match&lt;BidirectionalIterator&gt;&amp; m,
251                const std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; s);
252template &lt;class BidirectionalIterator&gt; std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type&gt; 
253    <A href="#o83" >operator</A> + (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* s,
254                const sub_match&lt;BidirectionalIterator&gt;&amp; m);
255template &lt;class BidirectionalIterator&gt; std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type&gt; 
256    <A href="#o84" >operator</A> + (const sub_match&lt;BidirectionalIterator&gt;&amp; m,
257                typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const * s);
258template &lt;class BidirectionalIterator&gt; 
259std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type&gt; 
260    <A href="#o85" >operator</A> + (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; s,
261                const sub_match&lt;BidirectionalIterator&gt;&amp; m);
262template &lt;class BidirectionalIterator&gt; 
263std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type&gt; 
264    <A href="#o86" >operator</A> + (const sub_match&lt;BidirectionalIterator&gt;&amp; m,
265                typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; s);
266template &lt;class BidirectionalIterator&gt; 
267std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type&gt; 
268    <A href="#o87" >operator</A> + (const sub_match&lt;BidirectionalIterator&gt;&amp; m1,
269                const sub_match&lt;BidirectionalIterator&gt;&amp; m2);
270
271//
272// stream inserter:
273//
274template &lt;class charT, class traits, class BidirectionalIterator&gt;
275basic_ostream&lt;charT, traits&gt;&amp;
276   <A href="#oi" >operator</A> &lt;&lt; (basic_ostream&lt;charT, traits&gt;&amp; os,
277                const sub_match&lt;BidirectionalIterator&gt;&amp; m);
278
279} // namespace boost</PRE>
280      <H3>Description</H3>
281      <H4>sub_match members</H4>
282      <PRE>typedef typename std::iterator_traits&lt;iterator&gt;::value_type value_type;</PRE>
283      <P>The type pointed to by the iterators.</P>
284      <PRE>typedef typename std::iterator_traits&lt;iterator&gt;::difference_type difference_type;</PRE>
285      <P>A type that represents the difference between two iterators.</P>
286      <PRE>typedef iterator iterator_type;</PRE>
287      <P>The iterator type.</P>
288      <PRE>iterator first</PRE>
289      <P>An iterator denoting the position of the start of the match.</P>
290      <PRE>iterator second</PRE>
291      <P>An iterator denoting the position of the end of the match.</P>
292      <PRE><A name=m1></A>bool matched</PRE>
293      <P>A Boolean value denoting whether this sub-expression participated in the match.</P>
294      <PRE><A name=m2></A>static difference_type length();</PRE>
295      <P><B>Effects: </B>returns the length of this matched sub-expression, or 0 if this
296         sub-expression was not matched: <CODE>matched ? distance(first, second) : 0)</CODE>.</P>
297      <PRE><A name=m3></A>operator basic_string&lt;value_type&gt;()const;</PRE>
298      <P><B>Effects: </B>converts *this into a string: returns <CODE>(matched ?
299         basic_string&lt;value_type&gt;(first, second) :
300         basic_string&lt;value_type&gt;()).</P>
301      </CODE><PRE><A name=m4></A>basic_string&lt;value_type&gt; str()const;</PRE>
302      <P><B>Effects: </B>returns a string representation of *this:&nbsp; <CODE>(matched ?
303            basic_string&lt;value_type&gt;(first, second) :
304            basic_string&lt;value_type&gt;())</CODE>.</P>
305      <PRE><A name=m5></A>int compare(const sub_match&amp; s)const;</PRE>
306      <P><B>Effects: </B>performs a lexical comparison to <EM>s</EM>: returns <CODE>str().compare(s.str())</CODE>.</P>
307      <PRE><A name=m6></A>int compare(const basic_string&lt;value_type&gt;&amp; s)const;</PRE>
308      <P><B>Effects: </B>compares *this to the string s: returns <CODE>str().compare(s)</CODE>.</P>
309      <PRE><A name=m7></A>int compare(const value_type* s)const;</PRE>
310      <P><B>Effects:<B></B> </B>compares *this to the null-terminated string <EM>s</EM>:<B>&nbsp;</B>returns
311         <CODE>str().compare(s)</CODE>.</P>
312      <PRE><A name=m9></A>typedef implementation-private capture_sequence_type;</PRE>
313      <P>Defines an implementation-specific type that&nbsp;satisfies the requirements of
314         a standard library Sequence (21.1.1 including the optional Table 68
315         operations),&nbsp;whose value_type is a <EM>sub_match&lt;BidirectionalIterator&gt;</EM>.&nbsp;This
316         type happens to be <EM>std::vector&lt;sub_match&lt;BidirectionalIterator&gt; &gt;</EM>,
317         but you shouldn't actually rely on that.</P>
318      <PRE><A name=m8></A>const capture_sequence_type&amp; <A href="#m8" >captures</A>()const; </PRE>
319      <P><STRONG>Effects:</STRONG> returns a sequence containing all the captures
320         obtained for this sub-expression.</P>
321      <P><STRONG>Preconditions:</STRONG> the library must be built and used with
322         BOOST_REGEX_MATCH_EXTRA defined, and you must pass the flag <A href="match_flag_type.html">
323            match_extra</A> to the regex matching functions (<A href="regex_match.html">regex_match</A>,
324         <A href="regex_search.html">regex_search</A>, <A href="regex_iterator.html">regex_iterator</A>
325         or <A href="regex_token_iterator.html">regex_token_iterator</A>) in order for
326         this member function to be defined and return useful information.</P>
327      <P><STRONG>Rationale:</STRONG> Enabling this feature has several consequences:
328      </P>
329      <UL>
330         <LI>
331         sub_match occupies more memory resulting in complex expressions running out of
332         memory or stack space more quickly during matching.
333         <LI>
334            The matching algorithms are less efficient at handling some features
335            (independent sub-expressions for example), even when <EM>match_extra</EM>
336         is not used.
337         <LI>
338            The matching algorithms are much less efficient (i.e. slower), when <EM>match_extra</EM>
339            is used.&nbsp; Mostly this is down to the extra memory allocations that have to
340            take place.</LI></UL>
341      <H4>sub_match non-member operators</H4>
342      <H5>Comparisons against self</H5>
343      <PRE><A name=o11></A>template &lt;class BidirectionalIterator&gt;
344bool operator == (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
345                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);</PRE>
346      <P><B>Effects: </B>returns <CODE>lhs.compare(rhs) == 0</CODE>.</P>
347      <PRE><A name=o12></A>template &lt;class BidirectionalIterator&gt;
348bool operator != (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
349                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);</PRE>
350      <P><B>Effects: </B>returns <CODE>lhs.compare(rhs) != 0</CODE>.</P>
351      <PRE><A name=o13></A>template &lt;class BidirectionalIterator&gt;
352bool operator &lt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
353                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);</PRE>
354      <P><B>Effects: </B>returns <CODE>lhs.compare(rhs) &lt; 0</CODE>.</P>
355      <PRE><A name=o14></A>template &lt;class BidirectionalIterator&gt;
356bool operator &lt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
357                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);</PRE>
358      <P><B>Effects: </B>returns <CODE>lhs.compare(rhs) &lt;= 0</CODE>.</P>
359      <PRE><A name=o15></A>template &lt;class BidirectionalIterator&gt;
360bool operator &gt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
361                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);</PRE>
362      <P><B>Effects: </B>returns <CODE>lhs.compare(rhs) &gt;= 0</CODE>.</P>
363      <PRE><A name=o16></A>template &lt;class BidirectionalIterator&gt;
364bool operator &gt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
365                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);</PRE>
366      <P><B>Effects: </B>returns <CODE>lhs.compare(rhs) &gt; 0</CODE>.</P>
367      <H5>Comparisons with std::basic_string</H5>
368      <pre><A name=o21></A>
369template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
370bool operator == (const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits,
371                  Allocator&gt;&amp; lhs, const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);
372</pre>
373      <P><B>Effects: </B>returns <CODE>lhs == rhs.str()</CODE>.</P>
374      <PRE><A name=o22></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
375bool operator != (const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; lhs,
376                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);</PRE>
377      <P><B>Effects: </B>returns <CODE>lhs != rhs.str()</CODE>.</P>
378      <PRE><A name=o23></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
379bool operator &lt; (const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; lhs,
380                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);</PRE>
381      <P><B>Effects: </B>returns <CODE>lhs&nbsp;&lt; rhs.str()</CODE>.</P>
382      <PRE><A name=o24></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
383bool operator &gt; (const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; lhs,
384                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);</PRE>
385      <P><B>Effects: </B>returns <CODE>lhs&nbsp;&gt; rhs.str()</CODE>.</P>
386      <PRE><A name=o25></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
387bool operator &gt;= (const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; lhs,
388                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);</PRE>
389      <P><B>Effects: </B>returns <CODE>lhs &gt;= rhs.str()</CODE>.</P>
390      <PRE><A name=o26></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
391bool operator &lt;= (const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; lhs,
392                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs);</PRE>
393      <P><B>Effects: </B>returns <CODE>lhs &lt;= rhs.str()</CODE>.</P>
394      <PRE><A name=o31></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
395bool operator == (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
396                  const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; rhs);</PRE>
397      <P><B>Effects: </B>returns <CODE>lhs.str() == rhs</CODE>.</P>
398      <PRE><A name=o32></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
399bool operator != (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
400                  const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; rhs);</PRE>
401      <P><B>Effects: </B>returns <CODE>lhs.str() != rhs</CODE>.</P>
402      <PRE><A name=o33></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
403bool operator &lt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
404                 const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; rhs);</PRE>
405      <P><B>Effects: </B>returns <CODE>lhs.str()&nbsp;&lt; rhs</CODE>.</P>
406      <PRE><A name=o34></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
407bool operator &gt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
408                 const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; rhs);</PRE>
409      <P><B>Effects: </B>returns <CODE>lhs.str()&nbsp;&gt; rhs</CODE>.</P>
410      <PRE><A name=o35></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
411bool operator &gt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
412                  const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; rhs);</PRE>
413      <P><B>Effects: </B>returns <CODE>lhs.str() &gt;= rhs</CODE>.</P>
414      <PRE><A name=o36></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
415bool operator &lt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
416                  const std::basic_string&lt;iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; rhs);</PRE>
417      <P><B>Effects: </B>returns <CODE>lhs.str() &lt;= rhs</CODE>.</P>
418      <H5>Comparisons with null-terminated strings</H5>
419      <PRE><A name=o41></A>template &lt;class BidirectionalIterator&gt; 
420bool operator == (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* lhs,
421                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs); </PRE>
422      <P><B>Effects: </B>returns <CODE>lhs == rhs.str()</CODE>.</P>
423      <PRE><A name=o42></A>template &lt;class BidirectionalIterator&gt; 
424bool operator != (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* lhs,
425                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs); </PRE>
426      <P><B>Effects: </B>returns <CODE>lhs != rhs.str()</CODE>.</P>
427      <PRE></A><A name=o43></A>template &lt;class BidirectionalIterator&gt; 
428bool operator &lt; (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* lhs,
429                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs); </PRE>
430      <P><B>Effects: </B>returns <CODE>lhs &lt; rhs.str()</CODE>.</P>
431      <PRE><A name=o44></A>template &lt;class BidirectionalIterator&gt; 
432bool operator &gt; (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* lhs,
433                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs); </PRE>
434      <P><B>Effects: </B>returns <CODE>lhs &gt; rhs.str()</CODE>.</P>
435      <PRE><A name=o45></A>template &lt;class BidirectionalIterator&gt; 
436bool operator &gt;= (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* lhs,
437                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs); </PRE>
438      <P><B>Effects: </B>returns <CODE>lhs &gt;= rhs.str()</CODE>.</P>
439      <PRE><A name=o46></A>template &lt;class BidirectionalIterator&gt; 
440bool operator &lt;= (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* lhs,
441                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs); </PRE>
442      <P><B>Effects: </B>returns <CODE>lhs &lt;= rhs.str()</CODE>.</P>
443      <PRE><A name=o51></A>template &lt;class BidirectionalIterator&gt; 
444bool operator == (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
445                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* rhs); </PRE>
446      <P><B>Effects: </B>returns <CODE>lhs.str() == rhs</CODE>.</P>
447      <PRE><A name=o52></A>template &lt;class BidirectionalIterator&gt; 
448bool operator != (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
449                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* rhs); </PRE>
450      <P><B>Effects: </B>returns <CODE>lhs.str() != rhs</CODE>.</P>
451      <PRE><A name=o53></A>template &lt;class BidirectionalIterator&gt; 
452bool operator &lt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
453                 typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* rhs); </PRE>
454      <P><B>Effects: </B>returns <CODE>lhs.str() &lt; rhs</CODE>.</P>
455      <PRE><A name=o54></A>template &lt;class BidirectionalIterator&gt; 
456bool operator &gt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
457                 typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* rhs); </PRE>
458      <P><B>Effects: </B>returns <CODE>lhs.str() &gt; rhs</CODE>.</P>
459      <PRE><A name=o55></A>template &lt;class BidirectionalIterator&gt; 
460bool operator &gt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
461                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* rhs); </PRE>
462      <P><B>Effects: </B>returns <CODE>lhs.str() &gt;= rhs</CODE>.</P>
463      <PRE><A name=o56></A>template &lt;class BidirectionalIterator&gt; 
464bool operator &lt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
465                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* rhs); </PRE>
466      <P><B>Effects: </B>returns <CODE>lhs.str() &lt;= rhs</CODE>.</P>
467      <H5>Comparisons with a single character</H5>
468      <PRE><A name=o61></A>template &lt;class BidirectionalIterator&gt; 
469bool operator == (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; lhs,
470                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs); </PRE>
471      <P><B>Effects: </B>returns <CODE>lhs == rhs.str()</CODE>.</P>
472      <PRE><A name=o62></A>template &lt;class BidirectionalIterator&gt; 
473bool operator != (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; lhs,
474                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs); </PRE>
475      <P><B>Effects: </B>returns <CODE>lhs != rhs.str()</CODE>.</P>
476      <PRE><A name=o63></A>template &lt;class BidirectionalIterator&gt; 
477bool operator &lt; (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; lhs,
478                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs); </PRE>
479      <P><B>Effects: </B>returns <CODE>lhs &lt; rhs.str()</CODE>.</P>
480      <PRE><A name=o64></A>template &lt;class BidirectionalIterator&gt; 
481bool operator &gt; (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; lhs,
482                 const sub_match&lt;BidirectionalIterator&gt;&amp; rhs); </PRE>
483      <P><B>Effects: </B>returns <CODE>lhs &gt; rhs.str()</CODE>.</P>
484      <PRE><A name=o65></A>template &lt;class BidirectionalIterator&gt; 
485bool operator &gt;= (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; lhs,
486                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs); </PRE>
487      <P><B>Effects: </B>returns <CODE>lhs &gt;= rhs.str()</CODE>.</P>
488      <PRE><A name=o66></A>template &lt;class BidirectionalIterator&gt; 
489bool operator &lt;= (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; lhs,
490                  const sub_match&lt;BidirectionalIterator&gt;&amp; rhs); </PRE>
491      <P><B>Effects: </B>returns <CODE>lhs &lt;= rhs.str()</CODE>.</P>
492      <PRE><A name=o71></A>template &lt;class BidirectionalIterator&gt; 
493bool operator == (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
494                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; rhs); </PRE>
495      <P><B>Effects: </B>returns <CODE>lhs.str() == rhs</CODE>.</P>
496      <PRE><A name=o72></A>template &lt;class BidirectionalIterator&gt; 
497bool operator != (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
498                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; rhs); </PRE>
499      <P><B>Effects: </B>returns <CODE>lhs.str() != rhs</CODE>.</P>
500      <PRE><A name=o73></A>template &lt;class BidirectionalIterator&gt; 
501bool operator &lt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
502                 typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; rhs); </PRE>
503      <P><B>Effects: </B>returns <CODE>lhs.str() &lt; rhs</CODE>.</P>
504      <PRE><A name=o74></A>template &lt;class BidirectionalIterator&gt; 
505bool operator &gt; (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
506                 typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; rhs); </PRE>
507      <P><B>Effects: </B>returns <CODE>lhs.str() &gt; rhs</CODE>.</P>
508      <PRE><A name=o75></A>template &lt;class BidirectionalIterator&gt; 
509bool operator &gt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
510                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; rhs); </PRE>
511      <P><B>Effects: </B>returns <CODE>lhs.str() &gt;= rhs</CODE>.</P>
512      <PRE><A name=o76></A>template &lt;class BidirectionalIterator&gt; 
513bool operator &lt;= (const sub_match&lt;BidirectionalIterator&gt;&amp; lhs,
514                  typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; rhs); </PRE>
515      <P><B>Effects: </B>returns <CODE>lhs.str() &lt;= rhs</CODE>.</P>
516      <h5>Addition operators</h5>
517      <P>The addition operators for sub_match allow you to add a sub_match to any type
518         to which you can add a std::string and obtain a new string as the result.</P>
519      <PRE><A name=o81></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
520std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt; 
521    operator + (const std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; s,
522                const sub_match&lt;BidirectionalIterator&gt;&amp; m); </PRE>
523      <P><B>Effects: </B>returns <CODE>s + m.str()</CODE>.</P>
524      <PRE><A name=o82></A>template &lt;class BidirectionalIterator, class traits, class Allocator&gt; 
525std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;
526    operator + (const sub_match&lt;BidirectionalIterator&gt;&amp; m,
527                const std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type, traits, Allocator&gt;&amp; s); </PRE>
528      <P><B>Effects: </B>returns <CODE>m.str() + s</CODE>.</P>
529      <PRE><A name=o83></A>template &lt;class BidirectionalIterator&gt; std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type&gt; 
530    operator + (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const* s,
531                const sub_match&lt;BidirectionalIterator&gt;&amp; m); </PRE>
532      <P><B>Effects: </B>returns <CODE>s + m.str()</CODE>.</P>
533      <PRE><A name=o84></A>template &lt;class BidirectionalIterator&gt; std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type&gt; 
534    operator + (const sub_match&lt;BidirectionalIterator&gt;&amp; m,
535                typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const * s);</PRE>
536      <P><B>Effects: </B>returns <CODE>m.str() + s</CODE>.</P>
537      <PRE><A name=o85></A>template &lt;class BidirectionalIterator&gt; 
538std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type&gt; 
539    operator + (typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; s,
540                const sub_match&lt;BidirectionalIterator&gt;&amp; m); </PRE>
541      <P><B>Effects: </B>returns <CODE>s + m.str()</CODE>.</P>
542      <PRE><A name=o86></A>template &lt;class BidirectionalIterator&gt; 
543std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type&gt; 
544    operator + (const sub_match&lt;BidirectionalIterator&gt;&amp; m,
545                typename iterator_traits&lt;BidirectionalIterator&gt;::value_type const&amp; s); </PRE>
546      <P><B>Effects: </B>returns <CODE>m.str() + s</CODE>.</P>
547      <PRE><A name=o87></A>template &lt;class BidirectionalIterator&gt; 
548std::basic_string&lt;typename iterator_traits&lt;BidirectionalIterator&gt;::value_type&gt; 
549    operator + (const sub_match&lt;BidirectionalIterator&gt;&amp; m1,
550                const sub_match&lt;BidirectionalIterator&gt;&amp; m2);</PRE>
551      <P><B>Effects: </B>returns&nbsp;<CODE>m1.str() + m2.str()</CODE>.</P>
552      <h5>Stream inserter</h5>
553      <PRE><A name=oi></A>template &lt;class charT, class traits, class BidirectionalIterator&gt;
554basic_ostream&lt;charT, traits&gt;&amp;
555   operator &lt;&lt; (basic_ostream&lt;charT, traits&gt;&amp; os
556                const sub_match&lt;BidirectionalIterator&gt;&amp; m);</PRE>
557      <P>
558         <B>Effects: </B>returns <CODE>(os &lt;&lt; m.str())</CODE>.
559         <HR>
560      <p>Revised
561         <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan --> 
562         22&nbsp;Dec 2004
563         <!--webbot bot="Timestamp" endspan i-checksum="39359" --></p>
564      <p><i>© Copyright John Maddock&nbsp;1998-
565            <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%Y" startspan --> 
566            2004</i></p>
567      <P><I>Use, modification and distribution are subject to the Boost Software License,
568            Version 1.0. (See accompanying file <A href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</A>
569            or copy at <A href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</A>)</I></P>
570   </body>
571</html>
Note: See TracBrowser for help on using the repository browser.