Boost logo

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