mercredi 6 juin 2018

c++11 (MSVS2012) regex looking for file names in multiple line std::string

I have been trying to search for a clear answer on this one, but not been able to find it.

So lets say I have the string (where \n could be \r\n - I want to handle both - not sure if that is relevant or not)

"4345t435\ng54t a_file_123.xml rk\ngreg a_file_j34.xml fger 43t54"

Then I want to get matches:

  • a_file_123.xml
  • a_file_j34.xml

Here is my test code:

const str::string s = "4345t435\ng54t a_file_123.xml rk\ngreg a_file_j34.xml fger 43t54";

std::smatch matches;
if (std::regex_search(s, matches, std::regex("a_file(.*).xml")))
{
    std::cout << "total: " << matches.size() << std::endl;
    for (unsigned int i = 0; i < matches.size(); i++)
    {
        std::cout << "match: " << matches[i] << std::endl;
    }
}

Output is:

total: 2
match: a_file_123.xml
match: 123

I don't quite understand why match 2 is just "123"...

Aucun commentaire:

Enregistrer un commentaire