1
#include <iostream>
#include <string>
#include <regex>

using namespace std;

void Test(const char* str, const char* regExpression)
{
    regex rx(regExpression);
    bool match = regex_match(str, rx);
    bool search = regex_search(str, rx);

    cout << "String: " << str << "  expression: " << regExpression <<
        "   match: " << (match ? "yes" : "no ") <<
        "   search: " << (search ? "yes" : "no ")  << endl;
}


int main()
{
    Test("a", "a");
    Test("a", "abc");
    return 0;
}

g++ での結果:

String: a  expression: a   match: yes   search: no 
String: a  expression: abc   match: no    search: no 

VS2012 での結果:

String: a  expression: a   match: yes   search: yes
String: a  expression: abc   match: no    search: no

正しい結果は何ですか。また、regex_match と regex_search の違いは何ですか?

4

1 に答える 1

2

VS2012の結果は正しいです。_match文字列が式と一致するかどうかを_search確認し、文字列の一部の文字列が式と一致するかどうかを確認します。

式 と一致する"a"部分文字列も の部分文字列もありません。"a""abc"

(関連する SO の質問が見つかりませんが、gcc の (むしろ libstdc++ の) 正規表現の実装はバグが多く不完全であることが知られています。)

于 2013-03-03T12:05:30.390 に答える