QT-QRegExp和QRegularExpression

1.QRegExp

qt5.0版本之前正则表示示类是QRegExp,通过它能够筛选出我们想要的数据,它的构造函数如下所示:

QRegExp::QRegExp(const QString &pattern, Qt::CaseSensitivity cs = Qt::CaseSensitive, QRegExp::PatternSyntax syntax);

其中QRegExp::PatternSyntax syntax用于解释模式含义的语法,默认选择QRegExp::RegExp,主要参数如下所示:

1.1 QRegExp::RegExp参数

QT-QRegExp和QRegularExpression_第1张图片

 QT-QRegExp和QRegularExpression_第2张图片

 QT-QRegExp和QRegularExpression_第3张图片

 元字符使用示例:

^\d{5,12}$               //  匹配数字(比如qq号),必须为5位到12位数字
 
"^-?\d+$"             //匹配整数,可以为负数
 
"^(-?\d+)(\.\d+)?$"    //匹配浮点数
"^\d+$"                //匹配非负整数
 
"^\d+(\.\d+)?$"        //匹配非负整数
 
"^[A-Za-z]+$"           //匹配大小写英文字母     

QT-QRegExp和QRegularExpression_第4张图片

 2. 使用示例如下所示

    /*只能匹配整数,\\d表示转义字符,C++用\\来表示\ */
    QRegExp regx("^-?\\d+$");
    QValidator *validator = new QRegExpValidator(regx, this );
    ui->lineEdit->setValidator( validator );        //设置lineEdit只能输入数字
 
    QStringList list;
    list<<"123";
    list<<"123A456";
    list<<"555a";
    list<<"89d";
    list<<"3695x";
    list<<"69";
    list<<"78.9";
 
    foreach(QString s, list.filter(regx)){      //匹配字符串list
        qDebug()<

正则表达式讲解链接:正则表达式30分钟入门教程

QT-QRegExp和QRegularExpression_第5张图片

 

QT-QRegExp和QRegularExpression_第6张图片

 

QRegularExpressionMatch match(const QString &subject,        //被匹配的目标字符串
                             int offset = 0,               //匹配的字符串起始位置
                            MatchType matchType  = NormalMatch, //匹配类型
                           MatchOptions matchOptions = NoMatchOption) const;// 匹配选项

QT-QRegExp和QRegularExpression_第7张图片

 

      QRegularExpression re("(\\d+)/(\\d+)/(\\d+)");
      QRegularExpressionMatch match = re.match("1999/12/11");
      if (match.hasMatch()) {
         for(int i = 0; !match.captured(i).isEmpty(); i++)
         {
            qDebug()<<"index="<

打印如下所示:

index= 0 ,str= "1999/12/11" ,offset: 4 14
 
index= 1 ,str= "1999" ,offset: 4 8
 
index= 2 ,str= "12" ,offset: 9 11
 
index= 3 ,str= "11" ,offset: 12 14

因为() 表示一个集合,所以除了匹配(\\d+)/(\\d+)/(\\d+)外,还会再次匹配3个圆括号里的内容,所以就有4个captured

4、输入QString类型数据,判定其类型

代码如下

                      
                 QString Qdata=dataOP[0][2];
                 bool isDigital=Qdata.contains(QRegExp("^\\d+$"));//是否为纯数字 例如12345678
                 if(isDigital)
                 {
                     DataType="int";
                     auto ddata=Qdata.toInt();
                    
                 }
                 else if(Qdata.contains(QRegExp("^(-?\\d+)(\\.\\d+)?$")))//是否为浮点型例如 1234.567
                 {
                     DataType="double";
                     auto ddata=Qdata.toDouble();
                    
                 }
                 else
                 {
                     if(Qdata.toLower()=="true"||Qdata.toLower()=="false")
                     {
                           DataType="bool";
                           bool ddata = true;
                           if(Qdata.toLower()=="false")
                           {
                                ddata = false;
                               
                           }
                     }
                     else//为QString类型
                     {
                           DataType="string";
                           auto ddata=Qdata.toStdString();
                           
                     }
                 }
             

你可能感兴趣的:(qt,开发语言,c++,c语言,算法)