C++11正则表达式不匹配任何内容

C++11 regex to match nothing

本文关键字:任何内 不匹配 正则表达式 C++11      更新时间:2023-10-16

我遇到一个任务,该任务重用一个不匹配的正则表达式。

C++引用愉快地声明它已经有了这样的东西:http://en.cppreference.com/w/cpp/regex/basic_regex/basic_regex

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;
}

此程序打印:r1:1, r2:1这意味着两个正则表达式都匹配空字符串。

知道这里出了什么问题以及如何创建"不匹配"regex吗?

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