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 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