Разница между соответствием регулярному выражению _и поиском регулярного выражения _?

Я экспериментировал с регулярным выражением, пытаясь найти ответ на этот вопрос , и обнаружил, что хотя regex_matchнаходит совпадение, regex_searchнет.

Следующая программа была скомпилирована с помощью g++ 4.7.1:

#include 
#include 

int main()
{
    const std::string s = "/home/toto/FILE_mysymbol_EVENT.DAT";
    std::regex rgx(".*FILE_(.+)_EVENT\\.DAT.*");
    std::smatch match;

    if (std::regex_match(s.begin(), s.end(), rgx))
        std::cout << "regex_match: match\n";
    else
        std::cout << "regex_match: no match\n";

    if (std::regex_search(s.begin(), s.end(), match, rgx))
        std::cout << "regex_search: match\n";
    else
        std::cout << "regex_search: no match\n";
}

Выход:

regex_match: match
regex_search: no match

Является ли мое предположение, что оба должны совпадать, неверно, или может быть проблема с библиотекой в ​​​​GCC 4.7.1?

27
задан Community 23 May 2017 в 12:24
поделиться