Boost logo

Boost :

From: Allan Odgaard (ML_at_[hidden])
Date: 2004-04-05 16:55:51


On 5. Apr 2004, at 21:22, David Abrahams wrote:

> 1. There's no way to search a stream for a match because a regex
> requires bidirectional iterators, so I have to do this totally
> frustrating line-by-line search. I think Spirit has some kind of
> iterator that turns an input iterator into something forward by
> holding a cache of the data starting with the earliest copy of the
> original iterator. Could something like that be added?

Added only to the regex library? sounds like it would be a very useful
general purpose iterator adaptor, as there are also other (non
standard) algorithms which need to backtrack over the input.

> 2. Seems to me that if match objects could be converted to bool, we
> might be able to:

I can only second that, I am currently using my own regex library (some
of my reasoning to be found in this c.l.c++.m thread:
<http://tinyurl.com/2xnbd>), here I also allow implicit conversion to
the iterator type, which allow code like:

    iterator it = regex:find(first, last, ptrn);

Although I already did propose it for boost, but was told that it poses
a problem with the ambiguity of an "empty" match at the end of the
string and "no match at all" -- my argument here is that if one knows
that the pattern might generate such a match (and one is interested in
knowing about it), one just declares the result to be the match object.
The former generally allows to code w/o all those if's to see if
something was actually matched -- at least it has made much of my code
simpler/shorter.

> if (boost::smatch m = boost::regex_match(line, pat))

or: if (boost::smatch const& m = boost::regex_match(line, pat))

> [...] Are match objects expensive to construct?

At least they do not have to be :)


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk