C ++:为什么正则表达式模式“[+ - / *]”匹配字符串“。”?

时间:2015-10-24 12:45:26

标签: c++ regex

我使用的正则表达式出了什么问题?

#include<regex>
#include<iostream>
#include<string>
using namespace std;
int main(int argc,char *argv[])
{
    smatch results;
    string temp("[+-/*]");
    string test(".");

    regex r(temp);

    if(regex_search(test,results,r))
        cout<<results.str()<<endl;
    return 0;
}

“”。将打印输出,如果我使用'\'创建转义序列,如:

string temp("[\\+-/\\*]");

输出仍然存在。

1 个答案:

答案 0 :(得分:8)

问题是-在字符类[]内的解释不同,涵盖范围内的字符。这是对-的解释,可让您定义[A-Z]以涵盖所有大写字母,或[0-9]以涵盖所有小数位数。

如果您想使用-,请将其放在块的开头或末尾,或者使用\将其转义:

string temp("[-+/*]");

否则,[+-/]涵盖代码介于'+'(43)和'/'(47)之间的所有字符,包括'+'',',{ {1}},'-''.'