|
Boost Users : |
From: David Jenkins (david_at_[hidden])
Date: 2006-10-02 19:58:57
I've been using Xpressive and think it's great. But, I think the following
program shows two problems.
Problem 1: You get a runtime error if you uncomment the line "std::wcout
<< what2.position(0) << L'\n';"
Problem 2: I think it should output:
This is my face
is
my
face
But it actually outputs:
This is
is
Note that if you replace the nested regular expression with the (commented
out) non-nested one, it still outputs the wrong thing. It outputs "This is"
instead of "This is my face."
Here is the program. Thanks for your help.
#include <iostream>
#include <boost/xpressive/xpressive.hpp>
using namespace boost::xpressive;
int main()
{
std::wstring str( L"This is his face." );
// find a whole word
wsregex subtokens = +alnum;
wsregex token = as_xpr(L"This ") >> subtokens;
// wsregex token = as_xpr(L"This ") >> +alnum; // Also outputs the wrong
thing
wsregex_iterator cur( str.begin(), str.end(), token );
wsregex_iterator end;
for( ; cur != end; ++cur )
{
wsmatch const &what = *cur;
std::wcout << what.str(0) << L'\n';
wsmatch::nested_results_type::const_iterator cur2 =
what.nested_results().begin();
wsmatch::nested_results_type::const_iterator end2 =
what.nested_results().end();
for ( ; cur2 != end2; ++cur2) {
wsmatch const &what2 = *cur2;
std::wcout << what2.str(0) << L'\n';
// std::wcout << what2.position(0) << L'\n'; // CAUSES RUNTIME
ERROR
}
}
std::cout << "\n\n" << std::flush;
return 0;
}
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net