
John Maddock wrote:
The way to find out which sub-expression matched is simply:
match_results<something> what; ... for(unsigned i = 1; i < what.size(); ++i) { if(what[i].matched) std:cout << "sub-expression " << i << " matched " << what[i] << std::endl; }
First, thanks for the reply, it's nearly what I need ;) Actually, either I misunderstood something or is this code giving me just the first part in the regex that matches ? e.g. if I try <code> std::string myString ="jayjay"; std::string myRegexSearch = "(ay)|(j)(?=[aeiouy])"; boost:regex* myRegexp = new boost::regex (myRegexSearch, boost::regex::normal); boost::cmatch what; boost::regex_search (myString , what, *myRegexp); for(unsigned _ = 1; _ < what.size(); ++_) { if(what[_].matched) printf("rule [%d] matched '%s'\n",_,what[_]); } delete myRegexp; </code> The output is rule [2] matched 'jayjay' where I expected it to tell me "rule 1" and "rule 2" matched! Am I missing something? Thanks again, Line.