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