C++ C++;11正则表达式不匹配

C++ C++;11正则表达式不匹配,c++,regex,c++11,stl,C++,Regex,C++11,Stl,我遇到一个任务,它需要一个不匹配的正则表达式 C++参考很高兴地声明它已经有了这样的东西: 1) 默认构造函数。构造一个空正则表达式,它将不匹配任何内容 但在现实中(clang 3.3),情况并非如此: #include <string> #include <regex> int main(int argc, const char *argv[]) { std::regex re1; std::regex re2(""); std::smat

我遇到一个任务,它需要一个不匹配的正则表达式

C++参考很高兴地声明它已经有了这样的东西:

1) 默认构造函数。构造一个空正则表达式,它将不匹配任何内容

但在现实中(clang 3.3),情况并非如此:

#include <string>
#include <regex>

int main(int argc, const char *argv[]) {

    std::regex re1;
    std::regex re2("");
    std::smatch rt1, rt2;

    bool r1 = std::regex_match(std::string(""), rt1, re1);
    bool r2 = std::regex_match(std::string(""), rt2, re2);
    std::cerr << "r1:" << r1 << ", r2:" << r2 << std::endl;
}
#包括
#包括
int main(int argc,const char*argv[]{
标准::正则表达式re1;
std::正则表达式re2(“”);
标准:smatch rt1、rt2;
boolr1=std::regex_匹配(std::string(“”),rt1,re1);
boolr2=std::regex_匹配(std::string(“”),rt2,re2);

std::cerrstd::basic_regex
的默认构造函数构造一个“不匹配任何字符序列”的正则表达式[re.regex.construct]/1。如果您的实现匹配一个空字符序列,则它是错误的。

使用“nothing”,你的意思是
^$
?每个字符串的开头都有一个空字符串,这就是它所匹配的。@Barmar还有一个论点,即空匹配模式表示普遍接受的DFA
({q},s,{q*s->q},q,{q}})
,对于一些抽象字符集
s
,以及(q*s->q在s中的意思是,qxs q)@Dfr:所以你想要一个从不报告任何匹配的正则表达式,对吗?与匹配缺少内容的选项相反?@Dfr在这种情况下,您应该使用boost.regex。GNU libstdc++regex库在当前的4.9版本之前只是非功能性存根