C++ Qt中不匹配的数字正则表达式

C++ Qt中不匹配的数字正则表达式,c++,regex,qt,C++,Regex,Qt,我正在为qqt计算器开发一个数字解析器。我创建了一些正则表达式,以匹配不同类型的数字: 理由:^[+-]?\d+\/[+-]?\d+$ 整数:^[+-]?\d+\.?0*$ 实数:^[+-]?\d*\.0*[1-9][0-9]*$ 复合词:^[+-]?[0-9]*(\.[0-9]*\/[+-]?[0-9]+)?\$[+-]?[0-9]*(\.[0-9]*\/[+-]?[0-9]+)?$ 我尝试在QString上使用它们的以下功能: parser.h: 主要条款c: 我试着用几个QString来

我正在为qqt计算器开发一个数字解析器。我创建了一些正则表达式,以匹配不同类型的数字:

理由:
^[+-]?\d+\/[+-]?\d+$

整数:
^[+-]?\d+\.?0*$

实数:
^[+-]?\d*\.0*[1-9][0-9]*$

复合词:
^[+-]?[0-9]*(\.[0-9]*\/[+-]?[0-9]+)?\$[+-]?[0-9]*(\.[0-9]*\/[+-]?[0-9]+)?$

我尝试在QString上使用它们的以下功能:

parser.h:
主要条款c: 我试着用几个QString来运行这段代码,它们都是数字,但通常都失败了。特别是:如果只有一个字符,如test=“4”,则它不会与数字匹配

你知道为什么那些布尔函数会失败吗?也许我使用了错误的Qt函数,但是在尝试了几个之后,这个函数看起来就像我正在搜索的一样

请随意提出建设性的批评

多谢各位


你的表情很好,但是用
\\d
替换
\d
。在我的程序中测试了你的代码。 我真的建议您使用哪个可以在线调试您的表达式

详情来自:

<强>注>:C++编译器在字符串中转换反斜杠。包括 \在regexp中,输入两次,即\。匹配反斜杠 字符本身,输入四次,即\\


整数测试似乎接受小数点。您需要避开反斜杠虽然这可能不会导致您的问题,但是
exactMatch()
已经用字符串开头和字符串结尾锚来封装正则表达式,因此无需放置它们。事实上,整数测试必须接受像“3.0”这样的数字,它们将被转换为3。逃过反斜杠?我将调查此事。我该怎么做?双反斜杠?
C++
中的反斜杠
'\'
是一个转义字符,因此要将反斜杠放入字符串中,它需要对自身进行转义
'\\'
:),并且需要双反斜杠的字符集还有其他缩写,如
\\s
\\w
\\b
。。。深入查看Qt文档。
     bool isRationnal(const QString s)
{
    QRegExp ratioExp ("^[+-]?\d+\/[+-]?\d+$");
    return ratioExp.exactMatch(s);
}
bool isInteger(const QString s)
{
    QRegExp regExp ("^[+-]?\d+\.?0*$");
    return regExp.exactMatch(s);
}
bool isReal(const QString s)
{
    QRegExp regExp ("^[+-]?\d*\.0*[1-9][0-9]*$");
    return regExp.exactMatch(s);
}
bool isComplex(const QString s)
{
    QRegExp regExp ("^[+-]?[0-9]*(\.[0-9]*|\/[+-]?[0-9]+)?\$[+-]?[0-9]*(\.[0-9]*|\/[+-]?[0-9]+)?$");
    return regExp.exactMatch(s);
}
bool isNumber(const QString s){
   bool ok=false;
   s.toInt(&ok);
   return ok;
}
QString test ="6/90";
    if(isReal(test))
        printf("real\n");

    if(isInteger(test))
        printf("Integer\n");

    if(isRationnal(test))
        printf("Rationnal\n");

    if(isNumber(test))
        printf("Number\n");
    else printf("et merde\n");
    QRegExp ratioExp ("^[+-]?\d+\/[+-]?\d+$");
    QRegExp IntExp ("^[+-]?\d+\.?0*$");
    QRegExp RealExp ("^[+-]?\d*\.0*[1-9][0-9]*$");
    QRegExp CplxExp ("^[+-]?[0-9]*(\.[0-9]*|\/[+-]?[0-9]+)?\$[+-]?[0-9]*(\.[0-9]*|\/[+-]?[0-9]+)?$");
    if(ratioExp.isValid())
        printf("ratio valide\n");

    if(IntExp.isValid())
        printf("int valide\n");
    if(RealExp.isValid())
        printf("real valide\n");
    if(CplxExp.isValid())
        printf("cplx valide\n");

    return 0;
}