gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:02:59 26 4
gpt4 key购买 nike

我需要验证一个字符串,该字符串至少有 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;
}

最佳答案

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

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

关于c++ - 正则表达式无法通过 getline() 输入正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20307214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com