C++ 通过getline()输入的正则表达式无法正常工作

C++ 通过getline()输入的正则表达式无法正常工作,c++,regex,C++,Regex,我需要验证一个长度至少为5个字符的字符串,该字符串包含至少一个大写字母、至少一个小写字母、至少一个数字,并且除了破折号和下划线之外没有其他字符。我已经用其他语言测试过了,它显然是有效的: ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z_\-]{5,}$ 但是,在C++中,这个简单的测试程序验证了诸如“AasdA”这样的字符串作为正确的输入。我知道我遗漏了一些显而易见的东西,但经过大量研究后,我无法判断到底是什么错了。也许这与getline()存储字符串的方式

我需要验证一个长度至少为5个字符的字符串,该字符串包含至少一个大写字母、至少一个小写字母、至少一个数字,并且除了破折号和下划线之外没有其他字符。我已经用其他语言测试过了,它显然是有效的:

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z_\-]{5,}$
但是,在C++中,这个简单的测试程序验证了诸如“AasdA”这样的字符串作为正确的输入。我知道我遗漏了一些显而易见的东西,但经过大量研究后,我无法判断到底是什么错了。也许这与getline()存储字符串的方式有关。这是我的密码:

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

using namespace std;

int main() {
    string test;
    do {
        cout << "Test: ";
        getline(cin, test);

        if (regex_match(test, regex("^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z_\-]{5,}$"))) {
            cout << "True." << endl;
        } else {
            cout << "False." << endl;
        }
    } while (test != "");
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
串试验;
做{

cout您需要将字符串常量中的反斜杠加倍:

if (regex_match(test, regex("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z_\\-]{5,}$"))) {

什么编译器?GCC还没有实现
regex
。@uk4321它现在已经实现了,4.8晚期,或者,如果是C++11,使用原始字符串:
R“(regex)”