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 回答