Ниже программа была записана для получения информации «День» с использованием C++ 11 std::regex_match & std::regex_search. Однако использование первого метода возвращает false
, а второй метод возвращает true
(ожидается). Я прочитал документацию и уже существующий вопрос SO, связанный с этим, но я не понимаю разницу между этими двумя методами и когда мы должны использовать любой из них? Могут ли они использоваться как взаимозаменяемые для любой общей проблемы?Разница между std :: regex_match и std :: regex_search?
Difference between regex_match and 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
Почему первый метод возвращает регулярное выражение false
в этом случае ?. regex
кажется правильным, поэтому в идеале оба должны были быть возвращены true
. Я выполнил вышеуказанную программу, изменив std::regex_match(input,match,r)
на std::regex_match(input,r)
и обнаружил, что он все еще возвращает false.
Может ли кто-нибудь объяснить приведенный выше пример и, в общем, использовать случаи этих методов?
Спасибо за объяснение. Не могли бы вы объяснить, почему нам нужно было изменить из соответствия [0] в соответствии с [1], чтобы получить точный результат в обоих случаях ?. Я имею в виду, что это касается std :: smatch использует понимание. –
@MantoshKumar Я добавил круглые скобки вокруг поля даты '(\ d {2})' для создания группы захвата. Из 'match_results' [документации] (http://en.cppreference.com/w/cpp/regex/match_results/operator_at)' match [0] 'всегда возвращает все согласованное выражение, а' match [1] ' возвращает первый подзаголовок и так далее. В этом случае у нас была только одна группа захвата за день и поэтому она хранится в первом подзаголовке. – Praetorian