Qt正则表达式使用举例

 更新时间:2024年02月19日 15:16:49   作者:骆驼胡杨  
这篇文章主要给大家介绍了关于Qt正则表达式使用的相关资料,Qt中的正则表达式模式匹配功能由QRegExp类实现,它完全支持Unicode,并可以应用于字符串验证、搜索、查找替换和分割等场景,需要的朋友可以参考下

正则表达式

  • 正则表达式即一个文本匹配字符串的一种模式,Qt中QRegExp类实现使用正则表达式进行模式匹配,且完全支持Unicode,主要应用:字符串验证、搜索、查找替换、分割。

  • 正则表达式中字符及字符集

    -

  • 正则表达式中的量词

    -

  • 正则表达式中的断言

    -

  • QRegExp同时支持通配符

    -

  • 新建控制台应用程序,项目名QRegExp
    编辑main.cpp文件

    //匹配字符
        QRegExp ret("a");
        qDebug() << "是否匹配成功: " << ret.exactMatch("abc");    //false
        qDebug() << "是否匹配成功: " << ret.exactMatch("a");      //true
    
    //匹配数字
        QRegExp retNum("(\\d*\\D{2})");
        qDebug() << "是否匹配成功: " << retNum.exactMatch("120kg");    //true
        qDebug() << "是否匹配成功: " << retNum.exactMatch("180cm");    //true
        qDebug() << "是否匹配成功: " << retNum.exactMatch("3M");       //false
    
    //匹配通配符
        QRegExp re("*.txt") ;
        re.setPatternSyntax(QRegExp::Wildcard); //支持通配符
        qDebug() << "通配符匹配: " << re.exactMatch("a.txt");         //true
        qDebug() << "通配符匹配: " << re.exactMatch("a.txt.bak");     //false
    
    //匹配单词边界
        QRegExp reg("\\b(hello|Hello)\\b");
        qDebug() << "多个单词匹配: " << reg.indexIn("helloEveryone");     //-1表示失败
        qDebug() << "多个单词匹配: " << reg.indexIn("Hmm Hello Everyone");//4 表示匹配到的字符位置
    
    //匹配捕获的文本
    //以 "(?:" 开始, 以 ")" 结束
        QRegExp regHeight("(\\d+)(?:\\s*)(cm|inch)");
        int res = regHeight.indexIn("zhangsan 170cm");
        if(res > -1){
            qDebug() << "regHeight(0):" << regHeight.cap(0);    //170cm
            qDebug() << "regHeight(1):" << regHeight.cap(1);    //170
            qDebug() << "regHeight(2):" << regHeight.cap(2);    //cm
        }
    
    //断言 (?!) 表示:不紧跟才能匹配
        QRegExp regAssertFalse("面(?!包)");
        QString str = "面包没了,只剩面条了";
        str.replace(regAssertFalse, "龙虾鲍鱼");
        qDebug() << str;    //输出: "面包没了,只剩龙虾鲍鱼了"
    	
    //断言 (?=) 表示:紧跟才匹配
        QRegExp regAssertTrue("面(?=包)");
        QString str1 = "面包没了,只剩面条了";
        str1.replace(regAssertTrue, "草");
        qDebug() << str1;    //输出: "龙虾鲍鱼没了,只剩面条了"
    

qt5新类

 //Qt5新类
    QRegularExpression regExp("hello");
    qDebug() << "QRegularExpression匹配字符: " <<regExp.match("hello world"); //输出(0, 5, "hello")

    regExp.setPattern("([A-Z]{3,8})");
    regExp.setPatternOptions(QRegularExpression::CaseInsensitiveOption);    //大小写不敏感

    qDebug() << "大小写不敏感匹配字符: " <<regExp.match("hello");

    //新类捕获匹配
    QRegularExpression regExp1("^(\\d\\d\\d\\d)/(\\d\\d)/(\\d\\d)$");
    QRegularExpressionMatch match0 = regExp1.match("2022/04/04");

    if(match0.isValid()){
        QString strMatch0 = match0.captured(0);
        QString year = match0.captured(1);
        QString month = match0.captured(2);
        QString day = match0.captured(3);

        qDebug() << "日期: " << strMatch0;
        qDebug() << "年: " << year;
        qDebug() << "月: " << month;
        qDebug() << "日: " << day;
    }

    QString sPattern;
    sPattern = "^(Jan|Feb|Mar|Apr|May) \\d\\d \\d\\d\\d\\d$";
    QRegularExpression regDate(sPattern);

    QString ss("Feb 02 2022");
    QRegularExpressionMatch dateMatch;
    dateMatch = regDate.match(ss, 0,
                              QRegularExpression::PartialPreferCompleteMatch); //部分匹配
    bool b_HasMatched = dateMatch.hasMatch();        //完整匹配的返回值
    bool b_Partial = dateMatch.hasPartialMatch();    //部分匹配的返回值

    qDebug() << b_HasMatched;
    qDebug() << b_Partial;

附正则表达式提取字符串中的数字方法 :

QString WndName("WndName1"); 
QRegExp rx("\\d+");
QString wndIndex;
rx.indexIn(WndName,0);
wndIndex=rx.cap(1);
qDebug()<<wndIndex;

正则表达式从一个字符串里提取特定的字段或数据 例如从"a=100"里提取"a"和"100" :

QString pattern("(.*)=(.*)");  
QRegExp rx(pattern);  
  
QString str("a=100");  
int pos = str.indexOf(rx);              // 0, 第一个的位置
                                        // 如果找不到str,则返回-1
                                        // 你也可以使用rx.indexin(str)
qDebug() << pos;  
if ( pos >= 0 )  
{  
    qDebug() << rx.matchedLength();     // 5, 匹配字符串到最后的长度
                                        // 或者-1如果没有匹配
    qDebug() << rx.capturedTexts();     // QStringList("a=100", "a", "100"),  
                                        //   0: 文本匹配模式
                                        //   1: 第一个()捕获的文本
                                        //   2: 第二个文本的捕获 
  
    qDebug() << rx.cap(0);              // a=100, 文本匹配模式  
    qDebug() << rx.cap(1);              // a, 第n个()捕获的文本  
    qDebug() << rx.cap(2);              // 100,  
  
    qDebug() << rx.pos(0);              // 0, 第n个捕获文本的位置
    qDebug() << rx.pos(1);              // 0  
    qDebug() << rx.pos(2);              // 2  
}

总结 

到此这篇关于Qt正则表达式使用的文章就介绍到这了,更多相关Qt正则表达式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Qt连接数据库并实现数据库增删改查的图文教程

    Qt连接数据库并实现数据库增删改查的图文教程

    QT连接数据库是应用开发的常用基础操作,经过实验我总结了一些例程,下面这篇文章主要给大家介绍了关于Qt连接数据库并实现数据库增删改查的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • tinyxml 常用的C++ XML解析器非常优秀

    tinyxml 常用的C++ XML解析器非常优秀

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好
    2012-11-11
  • C语言实现通讯录的详细代码

    C语言实现通讯录的详细代码

    本文详细讲解了C语言实现通讯录的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • VC++ 使用 _access函数判断文件或文件夹是否存在

    VC++ 使用 _access函数判断文件或文件夹是否存在

    这篇文章主要介绍了VC++ 使用 _access函数判断文件或文件夹是否存在的相关资料,需要的朋友可以参考下
    2015-10-10
  • C语言找出数组中的特定元素的算法解析

    C语言找出数组中的特定元素的算法解析

    这篇文章主要介绍了C语言中找出数组中特定元素的算法解析,包括找出数组中两个只出现一次的数字的方法,需要的朋友可以参考下
    2016-03-03
  • C语言学生成绩管理系统源代码

    C语言学生成绩管理系统源代码

    这篇文章主要为大家详细介绍了C语言学生成绩管理系统源代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • C语言深入了解函数

    C语言深入了解函数

    C语言函数是用来模块化构建程序的。如果你的功能少,你可以全都写在mian函数中,但是当实现功能多的时候,如果全写在main的函数里,不仅代码不美观,而且函数实现的时候结构复杂,代码重复
    2022-05-05
  • C++使用OpenCV实现证件照蓝底换成白底功能(或其他颜色如红色)详解

    C++使用OpenCV实现证件照蓝底换成白底功能(或其他颜色如红色)详解

    这篇文章主要介绍了C++使用OpenCV实现证件照蓝底换成白底功能(或其他颜色如红色),结合实例形式详细分析了OpenCV颜色转换相关操作原理与实现技巧,需要的朋友可以参考下
    2019-12-12
  • Visual Studio 2019创建C++ Hello World项目的方法

    Visual Studio 2019创建C++ Hello World项目的方法

    这篇文章主要介绍了Visual Studio 2019创建C++ Hello World项目的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • C语言算法金手指摩尔投票法手撕绝大多数问题

    C语言算法金手指摩尔投票法手撕绝大多数问题

    这篇文章主要为大家介绍了C语言算法之金手指摩尔投票法手撕绝大多数问题的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-02-02

最新评论