Ниже была записана программа для получения информации "День" с использованием С++ 11 std:: regex_match и std:: regex_search. Однако использование первого метода возвращает false
, а второй метод возвращает true
(ожидается). Я прочитал документацию и уже существующий вопрос SO, связанный с этим, но я не понимаю разницу между этими двумя методами и когда мы должны использовать любой из них? Могут ли они использоваться как взаимозаменяемые для любой общей проблемы?
Разница между regex_match и regex_search?
#include<iostream>
#include<string>
#include<regex>
int main()
{
std::string input{ "Mon Nov 25 20:54:36 2013" };
//Day:: Exactly Two Number surrounded by spaces in both side
std::regex r{R"(\s\d{2}\s)"};
//std::regex r{"\\s\\d{2}\\s"};
std::smatch match;
if (std::regex_match(input,match,r)) {
std::cout << "Found" << "\n";
} else {
std::cout << "Did Not Found" << "\n";
}
if (std::regex_search(input, match,r)) {
std::cout << "Found" << "\n";
if (match.ready()){
std::string out = match[0];
std::cout << out << "\n";
}
}
else {
std::cout << "Did Not Found" << "\n";
}
}
Выход
Did Not Found
Found
25
Почему первый метод regex возвращает false
в этом случае?. regex
кажется правильным, поэтому в идеале оба должны были быть возвращены true
. Я запустил вышеуказанную программу, изменив std::regex_match(input,match,r)
на std::regex_match(input,r)
и обнаружив, что он все еще возвращает false.
Может ли кто-нибудь объяснить приведенный выше пример и, в общем, использовать случаи этих методов?