Hi all,
This is the test program:
#include
#include <iostream>
#include <string>
int main()
{
static const boost::regex regexRedirectedSection( "\\[(.+?)
\\s*=\\s*<(.+?):(.+?)>\\]",
boost::regbase::perl );
std::string input = "[MY_SECTION = FILE:SECTION]";
boost::cmatch what;
if ( boost::regex_search( input, what, regexRedirectedSection,
boost::regbase::perl ) )
{
cerr << "Matched new style section redirection!!!! Input
is: " << input << endl;
cerr << "0 gives: --" << what[0].first << "-- and second: "
<< what[0].second << endl;
cerr << "1 gives: --" << what[1].first << "-- and second: "
<< what[1].second << endl;
cerr << "2 gives: --" << what[2].first << "-- and second: "
<< what[2].second << endl;
cerr << "3 gives: --" << what[3].first << "-- and second: "
<< what[3].second << endl;
}
return 0;
}
This is the output:
[anibal@anibal ControlFile]$ ./match
Matched new style section redirection!!!! Input is: [MY_SECTION =
FILE:SECTION]
0 gives: --[MY_SECTION = FILE:SECTION]-- and second:
1 gives: --MY_SECTION = FILE:SECTION]-- and second: =
FILE:SECTION]
2 gives: --FILE:SECTION>]-- and second: :SECTION>]
3 gives: --SECTION>]-- and second: >]
I don't understand why $1 is not giving my MY_SECTION only.
It looks like the non-greedy operator is not working as I expect it.
This same expression works in Perl and jakarta's regex engine in Java.
I basically need to extract MY_SECTION, FILE, and SECTION from the
input string.
Any pointers as to what's going on will be greatly appreciated.
-Anibal