But I suspect it isnt the whole story, as I have the same 'seeking to end' problem with the more realistic tokeniser regex
"(aaa)|([a-zA-Z][a-zA-Z0-9_-]*)|(.)|(\n)"
where I'm looking for the longest identifier, but want 'aaa' treated as a keyword provided it isnt followed by other alphanums.
Doh! I forgot about subsequent (possibly unmatched) sub-expressions being used to break ties, there's another patch below that I'm testing now, I'm fairly sure it covers all eventualities this time.
I also wondered if the fact that match_continuous is set is relevant since all (toplevel) matches will start at the same place.
Correct, it's not relevant in this issue (it might be necessary in your "real" code however, depending on what you want to do). John. Index: boost/regex/v4/match_results.hpp =================================================================== RCS file: /cvsroot/boost/boost/boost/regex/v4/match_results.hpp,v retrieving revision 1.18 diff -r1.18 match_results.hpp 303c303,304 < BidiIterator base = (*this)[-1].first; ---
BidiIterator base = this->prefix().first; BidiIterator end = this->suffix().second; 312a314,341 if(p1->first == end) { if(p2->first != end) { // p2 must be better than p1, and no need to calculate // actual distances: base1 = 1; base2 = 0; break; } else { // *p1 and *p2 are either unmatched or match end-of sequence, // either way no need to calculate distances: base1 = 0; base2 = 0; len1 = 0; len2 = 0; break; } } else if((p2->first == end) && (p1->first != end)) { // p1 better than p2, and no need to calculate distances: base1 = 0; base2 = 1; break; }