C ++错误:没有匹配函数来调用' regex_match()'

时间:2016-10-15 00:37:35

标签: c++ regex match

我正在努力解决这个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 !!

1 个答案:

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