基本信息
文件名称:QT5中使用QRegularExpression代替QRegExp方法代码.docx
文件大小:16.56 KB
总页数:3 页
更新时间:2025-05-30
总字数:约2.08千字
文档摘要

QT5中使用QRegularExpression代替QRegExp方法代码

目录前言QRegExp类简介QRegularExpression类简介与QRegExp的主要用法区别总结

前言

今天遇到一个奇怪的问题,在qt5.12版本中使用正则QRegExpregx.setPattern([0-9]{10});去匹配一个十个连续数字,神奇的出现了在Debug调试模式下,匹配字符串D:/Project/bin/输液监控0571001001.db无法通过,在release模式下,可以匹配通过,并获取到0571001001字符串。带着这个我问题我上网查了一些资料。发现是QRegExp不支持反向预查,并且大家都有弃用QRegExp启用QRegularExpression,原因有QRegExp它具有笨拙的API,运行缓慢,错误,无法维护,支持perlregexp功能的非常有限子集,以此类推。QRegularExpression是Qt5加入的,QRegularExpression相比与QRegExp几乎完全兼容了perl的RegExp引用。且似乎处理了QRegExp中的错误。

QRegExp类简介

QRegExp类是qt框架的一部分,很早以前就引入了(QT4.2)。其基本使用如

matchedLength():匹配的长度capturedTexts():捕捉到的字符串列表captureCount():获取表达式中含有的捕捉组的数组cap(0):表示匹配的整个文本的值cap(1):表示第一个圆括号中的值cap(2):表示第二个圆括号中的值pos(intn):第n个组的位置默认值为0indexIn():搜索字符串以找到匹配的字串,返回索引值,失败返回-1

QRegExprx((.*)=(.*));

QStringstr=(a=101);

intpos=rx.indexIn(str);

if(pos=0)

qDebug()rx.matchedLength();//5

qDebug()rx.capturedTexts();//(a=101,a,101)

qDebug()rx.cap(0);//a=101

qDebug()rx.cap(1);//a

qDebug()rx.cap(2);//101

qDebug()rx.pos(0);//0

qDebug()rx.pos(1);//0

qDebug()rx.pos(2);//2

QRegularExpression类简介

QRegularExpression是在qt5.0引入,使用正则表达式提供模式匹配。

正则表达式是处理字符串和文本的非常强大的工具。

QRegularExpression实现的正则表达式完全支持Unicode。一个正则表达式由两部分组成:一个模式字符串和一组改变模式字符串含义的模式选项。

为了执行匹配,可以简单地调用match()函数,传递要匹配的字符串。match()函数的结果是一个QRegularExpressionMatch对象,可用于检查匹配结果。

//匹配两个数字后跟一个空格和一个单词

QRegularExpressionre(\\d\\d\\w+);

QRegularExpressionMatchmatch=re.match(abc123def);

boolhasMatch=match.hasMatch();//true

如果匹配成功,(隐式)捕获组编号0可用于检索与整个模式字符串匹配的子字符串:

QRegularExpressionre(\\d\\d\\w+);

QRegularExpressionMatchmatch=re.match(abc123def);

if(match.hasMatch())

QStringmatched=match.captured(0);//matched==23def

//doit

}

与QRegExp的主要用法区别

QRegExp的匹配结果存放在QRegExp对象自身:

QStringQRegExp::cap(intnth=0)const;

而QRegularExpression类只用来检索匹配,把检索结果单列出来,成为一个类QRegularExpressionMatch;

QStringQRegularExpressionMatch::captured(intnth=0)con