Hi,

 

I understand enough that regex_match() searches for matches based on the entire input string and apparently regex_search() allows for matches of the expression within the input string (i.e. the expression need not match the entire input string).  However, I’m not understanding why the following happened:

 

const char* pInput(“Loc info: Channel 2, Target 0, Lun 0”);

boost::cmatch found;

boost::regex expression(“.*Channel ([[:digit:]]{1,3})); // looking for the channel number only

if(boost::regex_match(pInput, found, expression, boost::regex_constants::match_partial)) {

    std::cout << “Matched: “ << std::atoi(found[1].first) << std::endl;

}

 

When using the above, with regex_match(), the match succeeded but the output string was: “Matched: 0”.  What?!?  If the expression was matched, why did the capture group 1 contain 0?  How should the expression have been made?

 

That’s what I don’t understand.  I’ve found that what I want is accomplished with altering the above thusly:

 

const char* pInput(“Loc info: Channel 2, Target 0, Lun 0”);

boost::cmatch found;

boost::regex expression(“Channel ([[:digit:]]{1,3})); // looking for the channel number only

if(boost::regex_search(pInput, found, expression)) {

    std::cout << “Matched: “ << std::atoi(found[1].first) << std::endl;

}

 

This gives me: “Matched: 2.”  Which is what I’m looking for.  I’d like to understand why regex_match() wasn’t giving me what I wanted.

 

Thanks everyone,

Andy