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 >