我正在努力解决这个C ++编译器错误,以使我的regex_match()函数正常工作。代码:
#include <iostream>
#include <string>
#include <regex>
using namespace std;
struct Person {
Person(string name, int age)
: n{name}, a{age}
{
regex r("^([!:*&%#@^\\[\\]\"\'])+"); // :*[]"'&^%#@!
for(char test : n) {
cout << "Character: " << test;
if(regex_match(test, r)) {
cout << endl << "Error: wrong character!" << endl;
}
}
}
string n;
int a;
};
int main() {
Person Goofy("Goofy",11);
return 0;
}
我想检查n是否包含我在regex r()中写的至少一个字符。
顺便说一句,对于学习正则表达式的人我找到了很棒的网站:https://regex101.com。
任何sugestions? THX !!
答案 0 :(得分:1)
test
是一个角色。对于char
来说,std::regex_match
没有超载。
我不确定您是要根据字符列表还是仅检查第一个字符来检查每个字符。如果是全部,您可以使用std::any_of
:
char const constexpr m[] = R"(:*[]"'&^%#@!)";
for(char test : n) {
if(any_of(begin(m), end(m), [test](char c){ return c == test; })) {
cout << endl << "Error: wrong character!" << endl;
}
}
基于其他评论我认为我理解你想要的东西:检查字符串n
是否包含任何“非法”字符。对于此任务,std::regex_search
更适合:
regex r{R"([:*\[\]"'&^%#@!])"};
if(regex_search(n, r)){
cout << endl << "Error: wrong character!" << endl;
}