以下のプログラムは、C++11 std::regex_match & std::regex_searchを使用して「日」情報を取得するように作成されています。ただし、最初の方法を使用すると戻りfalse
、2 番目の方法を使用すると戻りますtrue
(予想される)。ドキュメントとこれに関連する既存の SO の質問を読みましたが、これら 2 つの方法の違いと、どちらを使用する必要があるかがわかりません。一般的な問題に対して、両方を同じ意味で使用できますか?
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
false
この場合、最初の正規表現メソッドが返されるのはなぜですか?. はregex
正しいようですので、理想的には両方が返されているはずtrue
です。std::regex_match(input,match,r)
に変更して上記のプログラムを実行しstd::regex_match(input,r)
ましたが、それでも返されることがわかりましたfalse.
誰かが上記の例と、一般的にこれらのメソッドの使用例を説明できますか?