Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / regex / doc / html / boost_regex / ref / regex_iterator.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>regex_iterator</title>
5 <link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../../index.html" title="Boost.Regex 5.1.4">
8 <link rel="up" href="../ref.html" title="Reference">
9 <link rel="prev" href="regex_replace.html" title="regex_replace">
10 <link rel="next" href="regex_token_iterator.html" title="regex_token_iterator">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
15 <td align="center"><a href="../../../../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="regex_replace.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_token_iterator.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h3 class="title">
27 <a name="boost_regex.ref.regex_iterator"></a><a class="link" href="regex_iterator.html" title="regex_iterator">regex_iterator</a>
28 </h3></div></div></div>
29 <p>
30         The iterator type <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> will enumerate all
31         of the regular expression matches found in some sequence: dereferencing a
32         <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>
33         yields a reference to a <a class="link" href="match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> object.
34       </p>
35 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">BidirectionalIterator</span><span class="special">,</span>
36          <span class="keyword">class</span> <span class="identifier">charT</span> <span class="special">=</span> <span class="identifier">iterator_traits</span><span class="special">&lt;</span><span class="identifier">BidirectionalIterator</span><span class="special">&gt;::</span><span class="identifier">value_type</span><span class="special">,</span>
37          <span class="keyword">class</span> <span class="identifier">traits</span> <span class="special">=</span> <span class="identifier">regex_traits</span><span class="special">&lt;</span><span class="identifier">charT</span><span class="special">&gt;</span> <span class="special">&gt;</span>
38 <span class="keyword">class</span> <span class="identifier">regex_iterator</span>
39 <span class="special">{</span>
40 <span class="keyword">public</span><span class="special">:</span>
41    <span class="keyword">typedef</span>          <span class="identifier">basic_regex</span><span class="special">&lt;</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">&gt;</span>                              <span class="identifier">regex_type</span><span class="special">;</span>
42    <span class="keyword">typedef</span>          <span class="identifier">match_results</span><span class="special">&lt;</span><span class="identifier">BidirectionalIterator</span><span class="special">&gt;</span>                    <span class="identifier">value_type</span><span class="special">;</span>
43    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">iterator_traits</span><span class="special">&lt;</span><span class="identifier">BidirectionalIterator</span><span class="special">&gt;::</span><span class="identifier">difference_type</span> <span class="identifier">difference_type</span><span class="special">;</span>
44    <span class="keyword">typedef</span>          <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">*</span>                                       <span class="identifier">pointer</span><span class="special">;</span>
45    <span class="keyword">typedef</span>          <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&amp;</span>                                       <span class="identifier">reference</span><span class="special">;</span>
46    <span class="keyword">typedef</span>          <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward_iterator_tag</span>                               <span class="identifier">iterator_category</span><span class="special">;</span>
47
48    <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.construct1">regex_iterator</a><span class="special">();</span>
49    <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.construct2">regex_iterator</a><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">b</span><span class="special">,</span>
50                   <span class="keyword">const</span> <span class="identifier">regex_type</span><span class="special">&amp;</span> <span class="identifier">re</span><span class="special">,</span>
51                   <span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span>
52    <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.construct3">regex_iterator</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&amp;);</span>
53    <span class="identifier">regex_iterator</span><span class="special">&amp;</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.assign">operator=(</a><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&amp;);</span>
54    <span class="keyword">bool</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.op_eq">operator==</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&amp;)</span><span class="keyword">const</span><span class="special">;</span>
55    <span class="keyword">bool</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.op_ne">operator!=</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&amp;)</span><span class="keyword">const</span><span class="special">;</span>
56    <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&amp;</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.op_deref">operator*</a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
57    <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">*</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.op_arrow">operator-&gt;</a><span class="special">()</span><span class="keyword">const</span><span class="special">;</span>
58    <span class="identifier">regex_iterator</span><span class="special">&amp;</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.op_inc">operator++</a><span class="special">();</span>
59    <span class="identifier">regex_iterator</span> <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.op_inc2">operator++</a><span class="special">(</span><span class="keyword">int</span><span class="special">);</span>
60 <span class="special">};</span>
61
62 <span class="keyword">typedef</span> <span class="identifier">regex_iterator</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*&gt;</span>                  <span class="identifier">cregex_iterator</span><span class="special">;</span>
63 <span class="keyword">typedef</span> <span class="identifier">regex_iterator</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">&gt;</span>  <span class="identifier">sregex_iterator</span><span class="special">;</span>
64
65 <span class="preprocessor">#ifndef</span>  <span class="identifier">BOOST_NO_WREGEX</span>
66 <span class="keyword">typedef</span> <span class="identifier">regex_iterator</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="keyword">wchar_t</span><span class="special">*&gt;</span>               <span class="identifier">wcregex_iterator</span><span class="special">;</span>
67 <span class="keyword">typedef</span> <span class="identifier">regex_iterator</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">wstring</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">&gt;</span> <span class="identifier">wsregex_iterator</span><span class="special">;</span>
68 <span class="preprocessor">#endif</span>
69
70 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">&gt;</span> <span class="identifier">regex_iterator</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">&gt;</span>
71    <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.make">make_regex_iterator</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special">&lt;</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">&gt;&amp;</span> <span class="identifier">e</span><span class="special">,</span>
72                        <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span>
73
74 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">&gt;</span>
75    <span class="identifier">regex_iterator</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special">&lt;</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">&gt;::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">&gt;</span>
76       <a class="link" href="regex_iterator.html#boost_regex.regex_iterator.make">make_regex_iterator</a><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special">&lt;</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">&gt;&amp;</span> <span class="identifier">p</span><span class="special">,</span>
77                           <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special">&lt;</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">&gt;&amp;</span> <span class="identifier">e</span><span class="special">,</span>
78                           <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span>
79 </pre>
80 <h5>
81 <a name="boost_regex.ref.regex_iterator.h0"></a>
82         <span class="phrase"><a name="boost_regex.ref.regex_iterator.description"></a></span><a class="link" href="regex_iterator.html#boost_regex.ref.regex_iterator.description">Description</a>
83       </h5>
84 <p>
85         A <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>
86         is constructed from a pair of iterators, and enumerates all occurrences of
87         a regular expression within that iterator range.
88       </p>
89 <a name="boost_regex.regex_iterator.construct1"></a><pre class="programlisting"><span class="identifier">regex_iterator</span><span class="special">();</span>
90 </pre>
91 <p>
92         <span class="bold"><strong>Effects</strong></span>: constructs an end of sequence
93         <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>.
94       </p>
95 <a name="boost_regex.regex_iterator.construct2"></a><pre class="programlisting"><span class="identifier">regex_iterator</span><span class="special">(</span><span class="identifier">BidirectionalIterator</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">BidirectionalIterator</span> <span class="identifier">b</span><span class="special">,</span>
96                <span class="keyword">const</span> <span class="identifier">regex_type</span><span class="special">&amp;</span> <span class="identifier">re</span><span class="special">,</span>
97                <span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">match_default</span><span class="special">);</span>
98 </pre>
99 <p>
100         <span class="bold"><strong>Effects</strong></span>: constructs a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> that will enumerate
101         all occurrences of the expression <span class="emphasis"><em>re</em></span>, within the sequence
102         [a,b), and found using <a class="link" href="match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a> <span class="emphasis"><em>m</em></span>.
103         The object <span class="emphasis"><em>re</em></span> must exist for the lifetime of the <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>.
104       </p>
105 <p>
106         <span class="bold"><strong>Throws</strong></span>: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>
107         if the complexity of matching the expression against an N character string
108         begins to exceed O(N<sup>2</sup>), or if the program runs out of stack space while matching
109         the expression (if Boost.Regex is configured in recursive mode), or if the
110         matcher exhausts its permitted memory allocation (if Boost.Regex is configured
111         in non-recursive mode).
112       </p>
113 <a name="boost_regex.regex_iterator.construct3"></a><pre class="programlisting"><span class="identifier">regex_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&amp;</span> <span class="identifier">that</span><span class="special">);</span>
114 </pre>
115 <p>
116         <span class="bold"><strong>Effects</strong></span>: constructs a copy of <code class="computeroutput"><span class="identifier">that</span></code>.
117       </p>
118 <p>
119         <span class="bold"><strong>Postconditions</strong></span>: <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span> <span class="special">==</span> <span class="identifier">that</span></code>.
120       </p>
121 <a name="boost_regex.regex_iterator.assign"></a><pre class="programlisting"><span class="identifier">regex_iterator</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&amp;);</span>
122 </pre>
123 <p>
124         <span class="bold"><strong>Effects</strong></span>: sets <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> equal to those in <code class="computeroutput"><span class="identifier">that</span></code>.
125       </p>
126 <p>
127         <span class="bold"><strong>Postconditions</strong></span>: *this == that.
128       </p>
129 <a name="boost_regex.regex_iterator.op_eq"></a><pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&amp;</span> <span class="identifier">that</span><span class="special">)</span><span class="keyword">const</span><span class="special">;</span>
130 </pre>
131 <p>
132         <span class="bold"><strong>Effects</strong></span>: returns true if *this is equal
133         to that.
134       </p>
135 <a name="boost_regex.regex_iterator.op_ne"></a><pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">regex_iterator</span><span class="special">&amp;)</span><span class="keyword">const</span><span class="special">;</span>
136 </pre>
137 <p>
138         <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="special">!(*</span><span class="keyword">this</span> <span class="special">==</span> <span class="identifier">that</span><span class="special">)</span></code>.
139       </p>
140 <a name="boost_regex.regex_iterator.op_deref"></a><pre class="programlisting"><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">*()</span><span class="keyword">const</span><span class="special">;</span>
141 </pre>
142 <p>
143         <span class="bold"><strong>Effects</strong></span>: dereferencing a <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a> object it yields
144         a const reference to a <a class="link" href="match_results.html" title="match_results"><code class="computeroutput"><span class="identifier">match_results</span></code></a> object, whose members
145         are set as follows:
146       </p>
147 <div class="informaltable"><table class="table">
148 <colgroup>
149 <col>
150 <col>
151 </colgroup>
152 <thead><tr>
153 <th>
154                 <p>
155                   Element
156                 </p>
157               </th>
158 <th>
159                 <p>
160                   Value
161                 </p>
162               </th>
163 </tr></thead>
164 <tbody>
165 <tr>
166 <td>
167                 <p>
168                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">size</span><span class="special">()</span></code>
169                 </p>
170               </td>
171 <td>
172                 <p>
173                   <code class="computeroutput"><span class="number">1</span> <span class="special">+</span>
174                   <span class="identifier">re</span><span class="special">.</span><span class="identifier">mark_count</span><span class="special">()</span></code>
175                 </p>
176               </td>
177 </tr>
178 <tr>
179 <td>
180                 <p>
181                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">empty</span><span class="special">()</span></code>
182                 </p>
183               </td>
184 <td>
185                 <p>
186                   <code class="computeroutput"><span class="keyword">false</span></code>
187                 </p>
188               </td>
189 </tr>
190 <tr>
191 <td>
192                 <p>
193                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">first</span></code>
194                 </p>
195               </td>
196 <td>
197                 <p>
198                   The end of the last match found, or the start of the underlying
199                   sequence if this is the first match enumerated
200                 </p>
201               </td>
202 </tr>
203 <tr>
204 <td>
205                 <p>
206                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">last</span></code>
207                 </p>
208               </td>
209 <td>
210                 <p>
211                   The same as the start of the match found: <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">first</span></code>
212                 </p>
213               </td>
214 </tr>
215 <tr>
216 <td>
217                 <p>
218                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">matched</span></code>
219                 </p>
220               </td>
221 <td>
222                 <p>
223                   True if the prefix did not match an empty string: <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">first</span>
224                   <span class="special">!=</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">prefix</span><span class="special">().</span><span class="identifier">second</span></code>
225                 </p>
226               </td>
227 </tr>
228 <tr>
229 <td>
230                 <p>
231                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">first</span></code>
232                 </p>
233               </td>
234 <td>
235                 <p>
236                   The same as the end of the match found: <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">second</span></code>
237                 </p>
238               </td>
239 </tr>
240 <tr>
241 <td>
242                 <p>
243                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">last</span></code>
244                 </p>
245               </td>
246 <td>
247                 <p>
248                   The end of the underlying sequence.
249                 </p>
250               </td>
251 </tr>
252 <tr>
253 <td>
254                 <p>
255                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">matched</span></code>
256                 </p>
257               </td>
258 <td>
259                 <p>
260                   True if the suffix did not match an empty string: <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">first</span>
261                   <span class="special">!=</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">suffix</span><span class="special">().</span><span class="identifier">second</span></code>
262                 </p>
263               </td>
264 </tr>
265 <tr>
266 <td>
267                 <p>
268                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">first</span></code>
269                 </p>
270               </td>
271 <td>
272                 <p>
273                   The start of the sequence of characters that matched the regular
274                   expression
275                 </p>
276               </td>
277 </tr>
278 <tr>
279 <td>
280                 <p>
281                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">second</span></code>
282                 </p>
283               </td>
284 <td>
285                 <p>
286                   The end of the sequence of characters that matched the regular
287                   expression
288                 </p>
289               </td>
290 </tr>
291 <tr>
292 <td>
293                 <p>
294                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="number">0</span><span class="special">].</span><span class="identifier">matched</span></code>
295                 </p>
296               </td>
297 <td>
298                 <p>
299                   true if a full match was found, and false if it was a partial match
300                   (found as a result of the match_partial flag being set).
301                 </p>
302               </td>
303 </tr>
304 <tr>
305 <td>
306                 <p>
307                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="identifier">n</span><span class="special">].</span><span class="identifier">first</span></code>
308                 </p>
309               </td>
310 <td>
311                 <p>
312                   For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special">&lt;</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">size</span><span class="special">()</span></code>,
313                   the start of the sequence that matched sub-expression <span class="emphasis"><em>n</em></span>.
314                   Alternatively, if sub-expression <span class="emphasis"><em>n</em></span> did not
315                   participate in the match, then last.
316                 </p>
317               </td>
318 </tr>
319 <tr>
320 <td>
321                 <p>
322                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="identifier">n</span><span class="special">].</span><span class="identifier">second</span></code>
323                 </p>
324               </td>
325 <td>
326                 <p>
327                   For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special">&lt;</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">size</span><span class="special">()</span></code>,
328                   the end of the sequence that matched sub-expression <span class="emphasis"><em>n</em></span>.
329                   Alternatively, if sub-expression <span class="emphasis"><em>n</em></span> did not
330                   participate in the match, then last.
331                 </p>
332               </td>
333 </tr>
334 <tr>
335 <td>
336                 <p>
337                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">)[</span><span class="identifier">n</span><span class="special">].</span><span class="identifier">matched</span></code>
338                 </p>
339               </td>
340 <td>
341                 <p>
342                   For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special">&lt;</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">size</span><span class="special">()</span></code>,
343                   true if sub-expression <span class="emphasis"><em>n</em></span> participated in the
344                   match, false otherwise.
345                 </p>
346               </td>
347 </tr>
348 <tr>
349 <td>
350                 <p>
351                   <code class="computeroutput"><span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">position</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>
352                 </p>
353               </td>
354 <td>
355                 <p>
356                   For all integers <code class="computeroutput"><span class="identifier">n</span> <span class="special">&lt;</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">).</span><span class="identifier">size</span><span class="special">()</span></code>,
357                   then the distance from the start of the underlying sequence to
358                   the start of sub-expression match <span class="emphasis"><em>n</em></span>.
359                 </p>
360               </td>
361 </tr>
362 </tbody>
363 </table></div>
364 <a name="boost_regex.regex_iterator.op_arrow"></a><pre class="programlisting"><span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">*</span> <span class="keyword">operator</span><span class="special">-&gt;()</span><span class="keyword">const</span><span class="special">;</span>
365 </pre>
366 <p>
367         <span class="bold"><strong>Effects</strong></span>: returns <code class="computeroutput"><span class="special">&amp;(*</span><span class="keyword">this</span><span class="special">)</span></code>.
368       </p>
369 <a name="boost_regex.regex_iterator.op_inc"></a><pre class="programlisting"><span class="identifier">regex_iterator</span><span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">++();</span>
370 </pre>
371 <p>
372         <span class="bold"><strong>Effects</strong></span>: moves the iterator to the next
373         match in the underlying sequence, or the end of sequence iterator if none
374         if found. When the last match found matched a zero length string, then the
375         <a class="link" href="regex_iterator.html" title="regex_iterator"><code class="computeroutput"><span class="identifier">regex_iterator</span></code></a>
376         will find the next match as follows: if there exists a non-zero length match
377         that starts at the same location as the last one, then returns it, otherwise
378         starts looking for the next (possibly zero length) match from one position
379         to the right of the last match.
380       </p>
381 <p>
382         <span class="bold"><strong>Throws</strong></span>: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span></code>
383         if the complexity of matching the expression against an N character string
384         begins to exceed O(N<sup>2</sup>), or if the program runs out of stack space while matching
385         the expression (if Boost.Regex is configured in recursive mode), or if the
386         matcher exhausts its permitted memory allocation (if Boost.Regex is configured
387         in non-recursive mode).
388       </p>
389 <p>
390         <span class="bold"><strong>Returns</strong></span>: *this.
391       </p>
392 <a name="boost_regex.regex_iterator.op_inc2"></a><pre class="programlisting"><span class="identifier">regex_iterator</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">);</span>
393 </pre>
394 <p>
395         <span class="bold"><strong>Effects</strong></span>: constructs a copy result of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>, then
396         calls <code class="computeroutput"><span class="special">++(*</span><span class="keyword">this</span><span class="special">)</span></code>.
397       </p>
398 <p>
399         <span class="bold"><strong>Returns</strong></span>: result.
400       </p>
401 <a name="boost_regex.regex_iterator.make"></a><pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">&gt;</span>
402 <span class="identifier">regex_iterator</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">&gt;</span>
403    <span class="identifier">make_regex_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">charT</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special">&lt;</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">&gt;&amp;</span> <span class="identifier">e</span><span class="special">,</span>
404                      <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span>
405
406 <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ST</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">SA</span><span class="special">&gt;</span>
407 <span class="identifier">regex_iterator</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special">&lt;</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">&gt;::</span><span class="identifier">const_iterator</span><span class="special">,</span> <span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">&gt;</span>
408    <span class="identifier">make_regex_iterator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span><span class="special">&lt;</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">ST</span><span class="special">,</span> <span class="identifier">SA</span><span class="special">&gt;&amp;</span> <span class="identifier">p</span><span class="special">,</span>
409                      <span class="keyword">const</span> <span class="identifier">basic_regex</span><span class="special">&lt;</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">&gt;&amp;</span> <span class="identifier">e</span><span class="special">,</span>
410                      <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_flag_type</span> <span class="identifier">m</span> <span class="special">=</span> <span class="identifier">regex_constants</span><span class="special">::</span><span class="identifier">match_default</span><span class="special">);</span>
411 </pre>
412 <p>
413         <span class="bold"><strong>Effects</strong></span>: returns an iterator that enumerates
414         all occurrences of expression <span class="emphasis"><em>e</em></span> in text <span class="emphasis"><em>p</em></span>
415         using <a class="link" href="match_flag_type.html" title="match_flag_type"><code class="computeroutput"><span class="identifier">match_flag_type</span></code></a>
416         <span class="emphasis"><em>m</em></span>.
417       </p>
418 <h5>
419 <a name="boost_regex.ref.regex_iterator.h1"></a>
420         <span class="phrase"><a name="boost_regex.ref.regex_iterator.examples"></a></span><a class="link" href="regex_iterator.html#boost_regex.ref.regex_iterator.examples">Examples</a>
421       </h5>
422 <p>
423         The following example takes a C++ source file and builds up an index of class
424         names, and the location of that class in the file.
425       </p>
426 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">string</span><span class="special">&gt;</span>
427 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">map</span><span class="special">&gt;</span>
428 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">fstream</span><span class="special">&gt;</span>
429 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
430 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
431
432 <span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">;</span>
433
434 <span class="comment">// purpose:</span>
435 <span class="comment">// takes the contents of a file in the form of a string</span>
436 <span class="comment">// and searches for all the C++ class definitions, storing</span>
437 <span class="comment">// their locations in a map of strings/int's</span>
438
439 <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">difference_type</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">map_type</span><span class="special">;</span>
440
441 <span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">re</span> <span class="special">=</span>
442    <span class="comment">// possibly leading whitespace:   </span>
443    <span class="string">"^[[:space:]]*"</span>
444    <span class="comment">// possible template declaration:</span>
445    <span class="string">"(template[[:space:]]*&lt;[^;:{]+&gt;[[:space:]]*)?"</span>
446    <span class="comment">// class or struct:</span>
447    <span class="string">"(class|struct)[[:space:]]*"</span>
448    <span class="comment">// leading declspec macros etc:</span>
449    <span class="string">"("</span>
450       <span class="string">"\\&lt;\\w+\\&gt;"</span>
451       <span class="string">"("</span>
452          <span class="string">"[[:blank:]]*\\([^)]*\\)"</span>
453       <span class="string">")?"</span>
454       <span class="string">"[[:space:]]*"</span>
455    <span class="string">")*"</span>
456    <span class="comment">// the class name</span>
457    <span class="string">"(\\&lt;\\w*\\&gt;)[[:space:]]*"</span>
458    <span class="comment">// template specialisation parameters</span>
459    <span class="string">"(&lt;[^;:{]+&gt;)?[[:space:]]*"</span>
460    <span class="comment">// terminate in { or :</span>
461    <span class="string">"(\\{|:[^;\\{()]*\\{)"</span><span class="special">;</span>
462
463
464 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">regex</span> <span class="identifier">expression</span><span class="special">(</span><span class="identifier">re</span><span class="special">);</span>
465 <span class="identifier">map_type</span> <span class="identifier">class_index</span><span class="special">;</span>
466
467 <span class="keyword">bool</span> <span class="identifier">regex_callback</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">match_results</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">::</span><span class="identifier">const_iterator</span><span class="special">&gt;&amp;</span> <span class="identifier">what</span><span class="special">)</span>
468 <span class="special">{</span>
469    <span class="comment">// what[0] contains the whole string</span>
470    <span class="comment">// what[5] contains the class name.</span>
471    <span class="comment">// what[6] contains the template specialisation if any.</span>
472    <span class="comment">// add class name and position to map:</span>
473    <span class="identifier">class_index</span><span class="special">[</span><span class="identifier">what</span><span class="special">[</span><span class="number">5</span><span class="special">].</span><span class="identifier">str</span><span class="special">()</span> <span class="special">+</span> <span class="identifier">what</span><span class="special">[</span><span class="number">6</span><span class="special">].</span><span class="identifier">str</span><span class="special">()]</span> <span class="special">=</span> <span class="identifier">what</span><span class="special">.</span><span class="identifier">position</span><span class="special">(</span><span class="number">5</span><span class="special">);</span>
474    <span class="keyword">return</span> <span class="keyword">true</span><span class="special">;</span>
475 <span class="special">}</span>
476
477 <span class="keyword">void</span> <span class="identifier">load_file</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&amp;</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">istream</span><span class="special">&amp;</span> <span class="identifier">is</span><span class="special">)</span>
478 <span class="special">{</span>
479    <span class="identifier">s</span><span class="special">.</span><span class="identifier">erase</span><span class="special">();</span>
480    <span class="identifier">s</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">is</span><span class="special">.</span><span class="identifier">rdbuf</span><span class="special">()-&gt;</span><span class="identifier">in_avail</span><span class="special">());</span>
481    <span class="keyword">char</span> <span class="identifier">c</span><span class="special">;</span>
482    <span class="keyword">while</span><span class="special">(</span><span class="identifier">is</span><span class="special">.</span><span class="identifier">get</span><span class="special">(</span><span class="identifier">c</span><span class="special">))</span>
483    <span class="special">{</span>
484       <span class="keyword">if</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">s</span><span class="special">.</span><span class="identifier">size</span><span class="special">())</span>
485          <span class="identifier">s</span><span class="special">.</span><span class="identifier">reserve</span><span class="special">(</span><span class="identifier">s</span><span class="special">.</span><span class="identifier">capacity</span><span class="special">()</span> <span class="special">*</span> <span class="number">3</span><span class="special">);</span>
486       <span class="identifier">s</span><span class="special">.</span><span class="identifier">append</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="identifier">c</span><span class="special">);</span>
487    <span class="special">}</span>
488 <span class="special">}</span>
489
490 <span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">argc</span><span class="special">,</span> <span class="keyword">const</span> <span class="keyword">char</span><span class="special">**</span> <span class="identifier">argv</span><span class="special">)</span>
491 <span class="special">{</span>
492    <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">text</span><span class="special">;</span>
493    <span class="keyword">for</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">1</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;</span> <span class="identifier">argc</span><span class="special">;</span> <span class="special">++</span><span class="identifier">i</span><span class="special">)</span>
494    <span class="special">{</span>
495       <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"Processing file "</span> <span class="special">&lt;&lt;</span> <span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">]</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
496       <span class="identifier">std</span><span class="special">::</span><span class="identifier">ifstream</span> <span class="identifier">fs</span><span class="special">(</span><span class="identifier">argv</span><span class="special">[</span><span class="identifier">i</span><span class="special">]);</span>
497       <span class="identifier">load_file</span><span class="special">(</span><span class="identifier">text</span><span class="special">,</span> <span class="identifier">fs</span><span class="special">);</span>
498       <span class="comment">// construct our iterators:</span>
499       <span class="identifier">boost</span><span class="special">::</span><span class="identifier">sregex_iterator</span> <span class="identifier">m1</span><span class="special">(</span><span class="identifier">text</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">text</span><span class="special">.</span><span class="identifier">end</span><span class="special">(),</span> <span class="identifier">expression</span><span class="special">);</span>
500       <span class="identifier">boost</span><span class="special">::</span><span class="identifier">sregex_iterator</span> <span class="identifier">m2</span><span class="special">;</span>
501       <span class="identifier">std</span><span class="special">::</span><span class="identifier">for_each</span><span class="special">(</span><span class="identifier">m1</span><span class="special">,</span> <span class="identifier">m2</span><span class="special">,</span> <span class="special">&amp;</span><span class="identifier">regex_callback</span><span class="special">);</span>
502       <span class="comment">// copy results:</span>
503       <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">class_index</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span> <span class="special">&lt;&lt;</span> <span class="string">" matches found"</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
504       <span class="identifier">map_type</span><span class="special">::</span><span class="identifier">iterator</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">d</span><span class="special">;</span>
505       <span class="identifier">c</span> <span class="special">=</span> <span class="identifier">class_index</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span>
506       <span class="identifier">d</span> <span class="special">=</span> <span class="identifier">class_index</span><span class="special">.</span><span class="identifier">end</span><span class="special">();</span>
507       <span class="keyword">while</span><span class="special">(</span><span class="identifier">c</span> <span class="special">!=</span> <span class="identifier">d</span><span class="special">)</span>
508       <span class="special">{</span>
509          <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"class \""</span> <span class="special">&lt;&lt;</span> <span class="special">(*</span><span class="identifier">c</span><span class="special">).</span><span class="identifier">first</span> <span class="special">&lt;&lt;</span> <span class="string">"\" found at index: "</span> <span class="special">&lt;&lt;</span> <span class="special">(*</span><span class="identifier">c</span><span class="special">).</span><span class="identifier">second</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
510          <span class="special">++</span><span class="identifier">c</span><span class="special">;</span>
511       <span class="special">}</span>
512       <span class="identifier">class_index</span><span class="special">.</span><span class="identifier">erase</span><span class="special">(</span><span class="identifier">class_index</span><span class="special">.</span><span class="identifier">begin</span><span class="special">(),</span> <span class="identifier">class_index</span><span class="special">.</span><span class="identifier">end</span><span class="special">());</span>
513    <span class="special">}</span>
514    <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
515 <span class="special">}</span>
516 </pre>
517 </div>
518 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
519 <td align="left"></td>
520 <td align="right"><div class="copyright-footer">Copyright &#169; 1998-2013 John Maddock<p>
521         Distributed under the Boost Software License, Version 1.0. (See accompanying
522         file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
523       </p>
524 </div></td>
525 </tr></table>
526 <hr>
527 <div class="spirit-nav">
528 <a accesskey="p" href="regex_replace.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../ref.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="regex_token_iterator.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
529 </div>
530 </body>
531 </html>