• [QT]构建正则表达式测试


    正则表达式是个强大的东西

    暂时先记录一个用法:

    QString str = "Peak memory: KEY s";
    QString data = "Peak memory: 24.1 s";

    需要构建一个可以匹配 data 的正则表达式,模板为 str ,其中KEY代表需要提取的数据。

    PS: 需要注意的是 生成表达式中各种空格时候 \ 的用法,什么时候用一个,什么时候用2个或者4个,搞错了的话就不会进入if条件语句了。

    #include <QApplication>
    #include <QtGui>
    #include <QLabel>
    #include <QString>
    
    #include <iostream>
    using namespace std;
    
    void generateReg(const QString &data, const QString &str)
    {
    	Q_ASSERT(str != NULL && "Wrong input");
    
    	QString dst = str.trimmed();
    	
    	// generate reg expression
    	dst.replace(QRegExp("\s+"), "(?:\s+)");
    	dst.replace("KEY", "([1-9]+\.{,1}[0-9]*)");
    
    	//dst = "Peak memory:(?:\s+)([1-9]+\.{,1}[0-9]*)(?:\s+)s";
    	cout << "The reg pattern should be: " << "Peak memory:(?:\s+)([1-9]+\.{,1}[0-9]*)(?:\s+)s" << endl;
    	cout << "The dst String:            " << dst.toStdString() << endl;
    
    	QRegExp rx(dst);
    	int pos = data.indexOf(rx);
    	
    	if (pos > -1)
    	{
    		cout << endl << "RegExp worked:)" << endl;
    		QStringList capedStr = rx.capturedTexts();
    		qDebug() << capedStr;
    	}
    }
    
    int main(int argc, char *argv[])
    {
    	QApplication a(argc, argv);
    
    	QString str  = "Peak memory:   KEY s";
    	QString data = "Peak memory:   241 s";
    	generateReg(data, str);
    
    	return a.exec();
    }
    

      结果如下:

    [突然想起有的地方代码可能看不到,还是贴着文本格式备用]

    // 突然想起有可能看不了图片
    #include <QApplication>
    #include <QtGui>
    #include <QLabel>
    #include <QString>

    #include <iostream>
    using namespace std;

    void generateReg(const QString &data, const QString &str)
    {
    Q_ASSERT(str != NULL && "Wrong input");

    QString dst = str.trimmed();

    // generate reg expression
    dst.replace(QRegExp("\s+"), "(?:\s+)");
    dst.replace("KEY", "([1-9]+\.{,1}[0-9]*)");

    //dst = "Peak memory:(?:\s+)([1-9]+\.{,1}[0-9]*)(?:\s+)s";
    cout << "The reg pattern should be: " << "Peak memory:(?:\s+)([1-9]+\.{,1}[0-9]*)(?:\s+)s" << endl;
    cout << "The dst String: " << dst.toStdString() << endl;

    QRegExp rx(dst);
    int pos = data.indexOf(rx);

    if (pos > -1)
    {
    cout << endl << "RegExp worked:)" << endl;
    QStringList capedStr = rx.capturedTexts();
    qDebug() << capedStr;
    }
    }

    int main(int argc, char *argv[])
    {
    QApplication a(argc, argv);

    QString str = "Peak memory: KEY s";
    QString data = "Peak memory: 241 s";
    generateReg(data, str);

    return a.exec();
    }

  • 相关阅读:
    .net core 3.1 使用Redis缓存
    JavaSE 高级 第11节 缓冲输入输出字节流
    JavaSE 高级 第10节 字节数组输出流ByteArrayOutputStream
    JavaSE 高级 第09节 字节数组输入流ByteArrayInputStream
    JavaSE 高级 第08节 文件输出流FileOutputStream
    JavaSE 高级 第07节 文件输入流FileInputStream
    JavaSE 高级 第06节 初识I、O流
    JavaSE 高级 第05节 日期类与格式化
    JavaSE 高级 第04节 StringBuffer类
    JavaSE 高级 第03节 Math类与猜数字游戏
  • 原文地址:https://www.cnblogs.com/dawnWind/p/QT_01.html
Copyright © 2020-2023  润新知