Boost logo

Boost Users :

Subject: [Boost-users] non-greedy regex
From: Jeff Anderson (jefferya_at_[hidden])
Date: 2008-10-30 01:33:09

Hello, I'm using boost's regex for a school project (they encourage us
to use boost) Boost 1.34 is what is available on the school computers
(unless fedora 9 promotes a newer version out of testing before Tuesday.)

I'm trying to use a non-greedy quantifier in a regex. Here is an example
from my code:

    string input=string("/blog/2008/../");
    string expr=string("/.*?/\\.\\./");
    string replacement=string("/");
    std::ostringstream stream(std::ios::out | std::ios::binary);
    std::ostream_iterator<char, char> stream_iterator(stream);
    boost::regex pattern(expr, boost::regex::perl);
    boost::regex_replace(stream_iterator, input.begin(), input.end(),
pattern, replacement, boost::match_default | boost::format_all);

    string result=stream.str();

The expected output is "/blog/". I am getting "/". I've played with
different arguments to the boost::regex constructor, but I can't seem to
get it to output a correct result. I did notice that in the notes for
the boost regex library in 1.34 that there was a bug fixed related to
non-greedy quantifiers, so I'm fairly confident that I just have a
problem with my own code. A tarball can be provided with a
"ready-to-compile" example snippet and test case.

Then again, it could just as likely be a problem with the regular
expression itself, though I checked, re-checked, and double checked that
this is the correct syntax for the perl mode in the boost regex library.

Thanks for any input!

Jeff Anderson

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at