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

Non matching number Regex in Qt

本文关键字:数字 正则表达式 不匹配 Qt      更新时间:2023-10-16

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

配给 : ^[+-]?d+/[+-]?d+$

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

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

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

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

解析器.h :

     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;
}
<小时 />

主.c :

QString test ="6/90";
    if(isReal(test))
        printf("realn");
    if(isInteger(test))
        printf("Integern");
    if(isRationnal(test))
        printf("Rationnaln");
    if(isNumber(test))
        printf("Numbern");
    else printf("et merden");
    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 validen");
    if(IntExp.isValid())
        printf("int validen");
    if(RealExp.isValid())
        printf("real validen");
    if(CplxExp.isValid())
        printf("cplx validen");
    return 0;
}

我尝试使用几个 QString 运行此代码,这些 QString 是数字,但它通常会失败。特别是:如果只有一个像test="4"这样的caracter,它不会用数字进行数学运算。

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

随意提出建设性的批评,

谢谢

泰奥菲尔

你的表达式很好,但d替换为\d。在我的程序中测试了您的代码。我真的推荐这个网站,它可以在线调试你的表达式。

Qt官方文档的详细信息:

注意:C++编译器转换字符串中的反斜杠。要包括 \ 在正则表达式中,输入两次,即 \。匹配反斜杠 字符本身,输入四次,即\\。