2007-06-08 09:23:23 +00:00
< html >
< head >
2020-10-12 18:22:57 +01:00
< meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" >
2007-12-14 10:11:21 +00:00
< title > Understanding Marked Sub-Expressions and Captures</ title >
2010-07-08 22:49:58 +00:00
< link rel = "stylesheet" href = "../../../../../doc/src/boostbook.css" type = "text/css" >
2019-10-26 10:51:25 +01:00
< meta name = "generator" content = "DocBook XSL Stylesheets V1.79.1" >
2022-03-08 11:26:11 +00:00
< link rel = "home" href = "../index.html" title = "Boost.Regex 7.0.1" >
< link rel = "up" href = "../index.html" title = "Boost.Regex 7.0.1" >
2007-12-14 10:11:21 +00:00
< link rel = "prev" href = "unicode.html" title = "Unicode and Boost.Regex" >
< link rel = "next" href = "partial_matches.html" title = "Partial Matches" >
2024-03-23 19:03:45 +00:00
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
2007-06-08 09:23:23 +00:00
</ head >
< body bgcolor = "white" text = "black" link = "#0000FF" vlink = "#840084" alink = "#0000FF" >
2007-08-13 17:54:01 +00:00
< table cellpadding = "2" width = "100%" >< tr >
2007-06-08 09:23:23 +00:00
< td valign = "top" >< img alt = "Boost C++ Libraries" width = "277" height = "86" src = "../../../../../boost.png" ></ td >
2008-04-11 08:53:54 +00:00
< td align = "center" >< a href = "../../../../../index.html" > Home</ a ></ td >
2007-06-08 09:23:23 +00:00
< td align = "center" >< a href = "../../../../../libs/libraries.htm" > Libraries</ a ></ td >
2008-07-25 09:28:01 +00:00
< td align = "center" >< a href = "http://www.boost.org/users/people.html" > People</ a ></ td >
< td align = "center" >< a href = "http://www.boost.org/users/faq.html" > FAQ</ a ></ td >
2007-06-08 09:23:23 +00:00
< td align = "center" >< a href = "../../../../../more/index.htm" > More</ a ></ td >
2007-08-13 17:54:01 +00:00
</ tr ></ table >
2007-06-08 09:23:23 +00:00
< hr >
< div class = "spirit-nav" >
2010-07-08 22:49:58 +00:00
< a accesskey = "p" href = "unicode.html" >< img src = "../../../../../doc/src/images/prev.png" alt = "Prev" ></ a >< a accesskey = "u" href = "../index.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 = "partial_matches.html" >< img src = "../../../../../doc/src/images/next.png" alt = "Next" ></ a >
2007-06-08 09:23:23 +00:00
</ div >
2013-12-14 17:42:13 +00:00
< div class = "section" >
2007-06-08 09:23:23 +00:00
< div class = "titlepage" >< div >< div >< h2 class = "title" style = "clear: both" >
2011-01-01 12:27:00 +00:00
< a name = "boost_regex.captures" ></ a >< a class = "link" href = "captures.html" title = "Understanding Marked Sub-Expressions and Captures" > Understanding Marked Sub-Expressions
2007-12-14 10:11:21 +00:00
and Captures</ a >
</ h2 ></ div ></ div ></ div >
2007-06-08 09:23:23 +00:00
< p >
Captures are the iterator ranges that are "captured" by marked sub-expressions
as a regular expression gets matched. Each marked sub-expression can result
in more than one capture, if it is matched more than once. This document explains
how captures and marked sub-expressions in Boost.Regex are represented and
accessed.
</ p >
2011-12-24 17:51:57 +00:00
< h5 >
< a name = "boost_regex.captures.h0" ></ a >
2012-11-29 10:28:07 +00:00
< span class = "phrase" >< a name = "boost_regex.captures.marked_sub_expressions" ></ a ></ span >< a class = "link" href = "captures.html#boost_regex.captures.marked_sub_expressions" > Marked
2011-12-24 17:51:57 +00:00
sub-expressions</ a >
2007-12-14 10:11:21 +00:00
</ h5 >
2007-06-08 09:23:23 +00:00
< p >
2007-12-14 10:11:21 +00:00
Every time a Perl regular expression contains a parenthesis group < code class = "computeroutput" >< span class = "special" > ()</ span ></ code > , it spits out an extra field, known as a
2007-06-08 09:23:23 +00:00
marked sub-expression, for example the expression:
</ p >
< pre class = "programlisting" > (\w+)\W+(\w+)</ pre >
< p >
Has two marked sub-expressions (known as $1 and $2 respectively), in addition
the complete match is known as $& , everything before the first match as
$`, and everything after the match as $'. So if the above expression is searched
2007-12-14 10:11:21 +00:00
for within < code class = "computeroutput" >< span class = "string" > "@abc def--"</ span ></ code > ,
2007-06-08 09:23:23 +00:00
then we obtain:
</ p >
< div class = "informaltable" >< table class = "table" >
< colgroup >
< col >
< col >
</ colgroup >
< thead >< tr >
< th >
2010-07-08 22:49:58 +00:00
< p >
Sub-expression
</ p >
2007-06-08 09:23:23 +00:00
</ th >
< th >
2010-07-08 22:49:58 +00:00
< p >
Text found
</ p >
2007-06-08 09:23:23 +00:00
</ th >
</ tr ></ thead >
< tbody >
< tr >
< td >
2010-07-08 22:49:58 +00:00
< p >
$`
</ p >
2007-06-08 09:23:23 +00:00
</ td >
< td >
2010-07-08 22:49:58 +00:00
< p >
"@"
</ p >
2007-06-08 09:23:23 +00:00
</ td >
</ tr >
< tr >
< td >
2010-07-08 22:49:58 +00:00
< p >
$&
</ p >
2007-06-08 09:23:23 +00:00
</ td >
< td >
2010-07-08 22:49:58 +00:00
< p >
"abc def"
</ p >
2007-06-08 09:23:23 +00:00
</ td >
</ tr >
< tr >
< td >
2010-07-08 22:49:58 +00:00
< p >
$1
</ p >
2007-06-08 09:23:23 +00:00
</ td >
< td >
2010-07-08 22:49:58 +00:00
< p >
"abc"
</ p >
2007-06-08 09:23:23 +00:00
</ td >
</ tr >
< tr >
< td >
2010-07-08 22:49:58 +00:00
< p >
$2
</ p >
2007-06-08 09:23:23 +00:00
</ td >
< td >
2010-07-08 22:49:58 +00:00
< p >
"def"
</ p >
2007-06-08 09:23:23 +00:00
</ td >
</ tr >
< tr >
< td >
2010-07-08 22:49:58 +00:00
< p >
$'
</ p >
2007-06-08 09:23:23 +00:00
</ td >
< td >
2010-07-08 22:49:58 +00:00
< p >
"--"
</ p >
2007-06-08 09:23:23 +00:00
</ td >
</ tr >
</ tbody >
</ table ></ div >
< p >
2008-12-23 11:46:00 +00:00
In Boost.Regex all these are accessible via the < a class = "link" href = "ref/match_results.html" title = "match_results" >< code class = "computeroutput" >< span class = "identifier" > match_results</ span ></ code ></ a > class that gets filled
in when calling one of the regular expression matching algorithms ( < a class = "link" href = "ref/regex_search.html" title = "regex_search" >< code class = "computeroutput" >< span class = "identifier" > regex_search</ span ></ code ></ a > , < a class = "link" href = "ref/regex_match.html" title = "regex_match" >< code class = "computeroutput" >< span class = "identifier" > regex_match</ span ></ code ></ a > , or < a class = "link" href = "ref/regex_iterator.html" title = "regex_iterator" >< code class = "computeroutput" >< span class = "identifier" > regex_iterator</ span ></ code ></ a > ). So given:
2007-06-08 09:23:23 +00:00
</ p >
2007-12-14 10:11:21 +00:00
< pre class = "programlisting" >< span class = "identifier" > boost</ span >< span class = "special" > ::</ span >< span class = "identifier" > match_results</ span >< span class = "special" > < </ span >< span class = "identifier" > IteratorType</ span >< span class = "special" > > </ span > < span class = "identifier" > m</ span >< span class = "special" > ;</ span >
2007-06-08 09:23:23 +00:00
</ pre >
< p >
The Perl and Boost.Regex equivalents are as follows:
</ p >
< div class = "informaltable" >< table class = "table" >
< colgroup >
< col >
< col >
</ colgroup >
< thead >< tr >
< th >
2010-07-08 22:49:58 +00:00
< p >
Perl
</ p >
2007-06-08 09:23:23 +00:00
</ th >
< th >
2010-07-08 22:49:58 +00:00
< p >
Boost.Regex
</ p >
2007-06-08 09:23:23 +00:00
</ th >
</ tr ></ thead >
< tbody >
< tr >
< td >
2010-07-08 22:49:58 +00:00
< p >
$`
</ p >
2007-06-08 09:23:23 +00:00
</ td >
< td >
2010-07-08 22:49:58 +00:00
< p >
< code class = "computeroutput" >< span class = "identifier" > m</ span >< span class = "special" > .</ span >< span class = "identifier" > prefix</ span >< span class = "special" > ()</ span ></ code >
</ p >
2007-06-08 09:23:23 +00:00
</ td >
</ tr >
< tr >
< td >
2010-07-08 22:49:58 +00:00
< p >
$&
</ p >
2007-06-08 09:23:23 +00:00
</ td >
< td >
2010-07-08 22:49:58 +00:00
< p >
< code class = "computeroutput" >< span class = "identifier" > m</ span >< span class = "special" > [</ span >< span class = "number" > 0</ span >< span class = "special" > ]</ span ></ code >
</ p >
2007-06-08 09:23:23 +00:00
</ td >
</ tr >
< tr >
< td >
2010-07-08 22:49:58 +00:00
< p >
$n
</ p >
2007-06-08 09:23:23 +00:00
</ td >
< td >
2010-07-08 22:49:58 +00:00
< p >
< code class = "computeroutput" >< span class = "identifier" > m</ span >< span class = "special" > [</ span >< span class = "identifier" > n</ span >< span class = "special" > ]</ span ></ code >
</ p >
2007-06-08 09:23:23 +00:00
</ td >
</ tr >
< tr >
< td >
2010-07-08 22:49:58 +00:00
< p >
$'
</ p >
2007-06-08 09:23:23 +00:00
</ td >
< td >
2010-07-08 22:49:58 +00:00
< p >
< code class = "computeroutput" >< span class = "identifier" > m</ span >< span class = "special" > .</ span >< span class = "identifier" > suffix</ span >< span class = "special" > ()</ span ></ code >
</ p >
2007-06-08 09:23:23 +00:00
</ td >
</ tr >
</ tbody >
</ table ></ div >
< p >
2008-12-23 11:46:00 +00:00
In Boost.Regex each sub-expression match is represented by a < a class = "link" href = "ref/sub_match.html" title = "sub_match" >< code class = "computeroutput" >< span class = "identifier" > sub_match</ span ></ code ></ a > object, this is basically
2007-06-08 09:23:23 +00:00
just a pair of iterators denoting the start and end position of the sub-expression
match, but there are some additional operators provided so that objects of
2008-12-23 11:46:00 +00:00
type < a class = "link" href = "ref/sub_match.html" title = "sub_match" >< code class = "computeroutput" >< span class = "identifier" > sub_match</ span ></ code ></ a >
2007-12-14 10:11:21 +00:00
behave a lot like a < code class = "computeroutput" >< span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > basic_string</ span ></ code > : for example they are implicitly
convertible to a < code class = "computeroutput" >< span class = "identifier" > basic_string</ span ></ code > ,
2007-06-08 09:23:23 +00:00
they can be compared to a string, added to a string, or streamed out to an
output stream.
</ p >
2011-12-24 17:51:57 +00:00
< h5 >
< a name = "boost_regex.captures.h1" ></ a >
2012-11-29 10:28:07 +00:00
< span class = "phrase" >< a name = "boost_regex.captures.unmatched_sub_expressions" ></ a ></ span >< a class = "link" href = "captures.html#boost_regex.captures.unmatched_sub_expressions" > Unmatched
2011-12-24 17:51:57 +00:00
Sub-Expressions</ a >
2007-12-14 10:11:21 +00:00
</ h5 >
2007-06-08 09:23:23 +00:00
< p >
When a regular expression match is found there is no need for all of the marked
sub-expressions to have participated in the match, for example the expression:
</ p >
< pre class = "programlisting" > (abc)|(def)</ pre >
< p >
can match either $1 or $2, but never both at the same time. In Boost.Regex
2007-12-14 10:11:21 +00:00
you can determine which sub-expressions matched by accessing the < code class = "computeroutput" >< span class = "identifier" > sub_match</ span >< span class = "special" > ::</ span >< span class = "identifier" > matched</ span ></ code > data member.
2007-06-08 09:23:23 +00:00
</ p >
2011-12-24 17:51:57 +00:00
< h5 >
< a name = "boost_regex.captures.h2" ></ a >
2012-11-29 10:28:07 +00:00
< span class = "phrase" >< a name = "boost_regex.captures.repeated_captures" ></ a ></ span >< a class = "link" href = "captures.html#boost_regex.captures.repeated_captures" > Repeated
2011-12-24 17:51:57 +00:00
Captures</ a >
2007-12-14 10:11:21 +00:00
</ h5 >
2007-06-08 09:23:23 +00:00
< p >
When a marked sub-expression is repeated, then the sub-expression gets "captured"
multiple times, however normally only the final capture is available, for example
if
</ p >
< pre class = "programlisting" > (?:(\w+)\W+)+</ pre >
< p >
is matched against
</ p >
< pre class = "programlisting" > one fine day</ pre >
< p >
Then $1 will contain the string "day", and all the previous captures
will have been forgotten.
</ p >
< p >
However, Boost.Regex has an experimental feature that allows all the capture
2007-12-14 10:11:21 +00:00
information to be retained - this is accessed either via the < code class = "computeroutput" >< span class = "identifier" > match_results</ span >< span class = "special" > ::</ span >< span class = "identifier" > captures</ span ></ code > member function or the < code class = "computeroutput" >< span class = "identifier" > sub_match</ span >< span class = "special" > ::</ span >< span class = "identifier" > captures</ span ></ code > member function. These functions
2007-06-08 09:23:23 +00:00
return a container that contains a sequence of all the captures obtained during
the regular expression matching. The following example program shows how this
information may be used:
</ p >
2007-12-14 10:11:21 +00:00
< pre class = "programlisting" >< span class = "preprocessor" > #include</ span > < span class = "special" > < </ 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" > > </ span >
2007-06-08 09:23:23 +00:00
< span class = "preprocessor" > #include</ span > < span class = "special" > < </ span >< span class = "identifier" > iostream</ span >< span class = "special" > > </ span >
< span class = "keyword" > void</ span > < span class = "identifier" > print_captures</ span >< span class = "special" > (</ span >< span class = "keyword" > const</ span > < span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > string</ span >< span class = "special" > & </ span > < span class = "identifier" > regx</ span >< span class = "special" > ,</ span > < span class = "keyword" > const</ span > < span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > string</ span >< span class = "special" > & </ span > < span class = "identifier" > text</ span >< span class = "special" > )</ span >
< span class = "special" > {</ span >
< span class = "identifier" > boost</ span >< span class = "special" > ::</ span >< span class = "identifier" > regex</ span > < span class = "identifier" > e</ span >< span class = "special" > (</ span >< span class = "identifier" > regx</ span >< span class = "special" > );</ span >
< span class = "identifier" > boost</ span >< span class = "special" > ::</ span >< span class = "identifier" > smatch</ span > < span class = "identifier" > what</ span >< span class = "special" > ;</ span >
< span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > cout</ span > < span class = "special" > << </ span > < span class = "string" > "Expression: \""</ span > < span class = "special" > << </ span > < span class = "identifier" > regx</ span > < span class = "special" > << </ span > < span class = "string" > "\"\n"</ span >< span class = "special" > ;</ span >
< span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > cout</ span > < span class = "special" > << </ span > < span class = "string" > "Text: \""</ span > < span class = "special" > << </ span > < span class = "identifier" > text</ span > < span class = "special" > << </ span > < span class = "string" > "\"\n"</ span >< span class = "special" > ;</ span >
< span class = "keyword" > if</ span >< span class = "special" > (</ span >< span class = "identifier" > boost</ span >< span class = "special" > ::</ span >< span class = "identifier" > regex_match</ span >< span class = "special" > (</ span >< span class = "identifier" > text</ span >< span class = "special" > ,</ span > < span class = "identifier" > what</ span >< span class = "special" > ,</ span > < span class = "identifier" > e</ span >< span class = "special" > ,</ span > < span class = "identifier" > boost</ span >< span class = "special" > ::</ span >< span class = "identifier" > match_extra</ span >< span class = "special" > ))</ span >
< span class = "special" > {</ span >
< span class = "keyword" > unsigned</ span > < span class = "identifier" > i</ span >< span class = "special" > ,</ span > < span class = "identifier" > j</ span >< span class = "special" > ;</ span >
< span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > cout</ span > < span class = "special" > << </ span > < span class = "string" > "** Match found **\n Sub-Expressions:\n"</ span >< span class = "special" > ;</ span >
< span class = "keyword" > for</ span >< span class = "special" > (</ span >< span class = "identifier" > i</ span > < span class = "special" > =</ span > < span class = "number" > 0</ span >< span class = "special" > ;</ span > < span class = "identifier" > i</ span > < span class = "special" > < </ span > < span class = "identifier" > what</ span >< span class = "special" > .</ span >< span class = "identifier" > size</ span >< span class = "special" > ();</ span > < span class = "special" > ++</ span >< span class = "identifier" > i</ span >< span class = "special" > )</ span >
< span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > cout</ span > < span class = "special" > << </ span > < span class = "string" > " $"</ span > < span class = "special" > << </ span > < span class = "identifier" > i</ span > < span class = "special" > << </ span > < span class = "string" > " = \""</ span > < span class = "special" > << </ span > < span class = "identifier" > what</ span >< span class = "special" > [</ span >< span class = "identifier" > i</ span >< span class = "special" > ]</ span > < span class = "special" > << </ span > < span class = "string" > "\"\n"</ span >< span class = "special" > ;</ span >
< span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > cout</ span > < span class = "special" > << </ span > < span class = "string" > " Captures:\n"</ span >< span class = "special" > ;</ span >
< span class = "keyword" > for</ span >< span class = "special" > (</ span >< span class = "identifier" > i</ span > < span class = "special" > =</ span > < span class = "number" > 0</ span >< span class = "special" > ;</ span > < span class = "identifier" > i</ span > < span class = "special" > < </ span > < span class = "identifier" > what</ span >< span class = "special" > .</ span >< span class = "identifier" > size</ span >< span class = "special" > ();</ span > < span class = "special" > ++</ span >< span class = "identifier" > i</ span >< span class = "special" > )</ span >
< span class = "special" > {</ span >
< span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > cout</ span > < span class = "special" > << </ span > < span class = "string" > " $"</ span > < span class = "special" > << </ span > < span class = "identifier" > i</ span > < span class = "special" > << </ span > < span class = "string" > " = {"</ span >< span class = "special" > ;</ span >
< span class = "keyword" > for</ span >< span class = "special" > (</ span >< span class = "identifier" > j</ span > < span class = "special" > =</ span > < span class = "number" > 0</ span >< span class = "special" > ;</ span > < span class = "identifier" > j</ span > < span class = "special" > < </ span > < span class = "identifier" > what</ span >< span class = "special" > .</ span >< span class = "identifier" > captures</ span >< span class = "special" > (</ span >< span class = "identifier" > i</ span >< span class = "special" > ).</ span >< span class = "identifier" > size</ span >< span class = "special" > ();</ span > < span class = "special" > ++</ span >< span class = "identifier" > j</ span >< span class = "special" > )</ span >
< span class = "special" > {</ span >
< span class = "keyword" > if</ span >< span class = "special" > (</ span >< span class = "identifier" > j</ span >< span class = "special" > )</ span >
< span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > cout</ span > < span class = "special" > << </ span > < span class = "string" > ", "</ span >< span class = "special" > ;</ span >
< span class = "keyword" > else</ span >
< span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > cout</ span > < span class = "special" > << </ span > < span class = "string" > " "</ span >< span class = "special" > ;</ span >
< span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > cout</ span > < span class = "special" > << </ span > < span class = "string" > "\""</ span > < span class = "special" > << </ span > < span class = "identifier" > what</ span >< span class = "special" > .</ span >< span class = "identifier" > captures</ span >< span class = "special" > (</ span >< span class = "identifier" > i</ span >< span class = "special" > )[</ span >< span class = "identifier" > j</ span >< span class = "special" > ]</ span > < span class = "special" > << </ span > < span class = "string" > "\""</ span >< span class = "special" > ;</ span >
< span class = "special" > }</ span >
< span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > cout</ span > < span class = "special" > << </ span > < span class = "string" > " }\n"</ span >< span class = "special" > ;</ span >
< span class = "special" > }</ span >
< span class = "special" > }</ span >
< span class = "keyword" > else</ span >
< span class = "special" > {</ span >
< span class = "identifier" > std</ span >< span class = "special" > ::</ span >< span class = "identifier" > cout</ span > < span class = "special" > << </ span > < span class = "string" > "** No Match found **\n"</ span >< span class = "special" > ;</ span >
< span class = "special" > }</ span >
< span class = "special" > }</ span >
< span class = "keyword" > int</ span > < span class = "identifier" > main</ span >< span class = "special" > (</ span >< span class = "keyword" > int</ span > < span class = "special" > ,</ span > < span class = "keyword" > char</ span >< span class = "special" > *</ span > < span class = "special" > [])</ span >
< span class = "special" > {</ span >
< span class = "identifier" > print_captures</ span >< span class = "special" > (</ span >< span class = "string" > "(([[:lower:]]+)|([[:upper:]]+))+"</ span >< span class = "special" > ,</ span > < span class = "string" > "aBBcccDDDDDeeeeeeee"</ span >< span class = "special" > );</ span >
< span class = "identifier" > print_captures</ span >< span class = "special" > (</ span >< span class = "string" > "(.*)bar|(.*)bah"</ span >< span class = "special" > ,</ span > < span class = "string" > "abcbar"</ span >< span class = "special" > );</ span >
< span class = "identifier" > print_captures</ span >< span class = "special" > (</ span >< span class = "string" > "(.*)bar|(.*)bah"</ span >< span class = "special" > ,</ span > < span class = "string" > "abcbah"</ span >< span class = "special" > );</ span >
2011-12-24 17:51:57 +00:00
< span class = "identifier" > print_captures</ span >< span class = "special" > (</ span >< span class = "string" > "^(?:(\\w+)|(?> \\W+))*$"</ span >< span class = "special" > ,</ span >
2007-06-08 09:23:23 +00:00
< span class = "string" > "now is the time for all good men to come to the aid of the party"</ span >< span class = "special" > );</ span >
< span class = "keyword" > return</ span > < span class = "number" > 0</ span >< span class = "special" > ;</ span >
< span class = "special" > }</ span >
</ pre >
< p >
Which produces the following output:
</ p >
< pre class = "programlisting" > Expression: "(([[:lower:]]+)|([[:upper:]]+))+"
Text: "aBBcccDDDDDeeeeeeee"
** Match found **
Sub-Expressions:
$0 = "aBBcccDDDDDeeeeeeee"
$1 = "eeeeeeee"
$2 = "eeeeeeee"
$3 = "DDDDD"
Captures:
$0 = { "aBBcccDDDDDeeeeeeee" }
$1 = { "a", "BB", "ccc", "DDDDD", "eeeeeeee" }
$2 = { "a", "ccc", "eeeeeeee" }
$3 = { "BB", "DDDDD" }
Expression: "(.*)bar|(.*)bah"
Text: "abcbar"
** Match found **
Sub-Expressions:
$0 = "abcbar"
$1 = "abc"
$2 = ""
Captures:
$0 = { "abcbar" }
$1 = { "abc" }
$2 = { }
Expression: "(.*)bar|(.*)bah"
Text: "abcbah"
** Match found **
Sub-Expressions:
$0 = "abcbah"
$1 = ""
$2 = "abc"
Captures:
$0 = { "abcbah" }
$1 = { }
$2 = { "abc" }
Expression: "^(?:(\w+)|(?> \W+))*$"
Text: "now is the time for all good men to come to the aid of the party"
** Match found **
Sub-Expressions:
$0 = "now is the time for all good men to come to the aid of the party"
$1 = "party"
Captures:
$0 = { "now is the time for all good men to come to the aid of the party" }
2011-12-24 17:51:57 +00:00
$1 = { "now", "is", "the", "time", "for", "all", "good", "men", "to",
2007-06-08 09:23:23 +00:00
"come", "to", "the", "aid", "of", "the", "party" }
</ pre >
< p >
Unfortunately enabling this feature has an impact on performance (even if you
don't use it), and a much bigger impact if you do use it, therefore to use
this feature you need to:
</ p >
2012-11-29 10:28:07 +00:00
< div class = "itemizedlist" >< ul class = "itemizedlist" style = "list-style-type: disc; " >
2011-07-21 10:01:09 +00:00
< li class = "listitem" >
2010-07-08 22:49:58 +00:00
Define BOOST_REGEX_MATCH_EXTRA for all translation units including the
library source (the best way to do this is to uncomment this define in
boost/regex/user.hpp and then rebuild everything.
</ li >
2011-07-21 10:01:09 +00:00
< li class = "listitem" >
2010-07-08 22:49:58 +00:00
Pass the match_extra flag to the particular algorithms where you actually
need the captures information (regex_search, regex_match, or regex_iterator).
</ li >
2007-06-08 09:23:23 +00:00
</ ul ></ div >
</ div >
2024-03-23 19:03:45 +00:00
< div class = "copyright-footer" > Copyright © 1998-2013 John Maddock< p >
2007-11-07 03:23:31 +00:00
Distributed under the Boost Software License, Version 1.0. (See accompanying
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 > )
2007-12-14 10:11:21 +00:00
</ p >
2024-03-23 19:03:45 +00:00
</ div >
2007-06-08 09:23:23 +00:00
< hr >
< div class = "spirit-nav" >
2010-07-08 22:49:58 +00:00
< a accesskey = "p" href = "unicode.html" >< img src = "../../../../../doc/src/images/prev.png" alt = "Prev" ></ a >< a accesskey = "u" href = "../index.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 = "partial_matches.html" >< img src = "../../../../../doc/src/images/next.png" alt = "Next" ></ a >
2007-06-08 09:23:23 +00:00
</ div >
</ body >
</ html >