Qt正则表达式类QRegExp(附检验小程序)

网友投稿 988 2022-05-30

2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票!

我的投票地址:点击为我投票

在许多场景中,我们需要验证用户输入的数据是否有效,或者是查找并修改文本,或者是提取指定数据,为此,相对于Qstring的一些函数,QT提供了一个更加强大的类——QRegExp,使用函数配合正则表达式来操作字符串,QRegExp可以进行下面的操作,并附带检验小程序,可在文末下载。

一.正则表达式相关函数用法

1.提取数据

matchedLength() 匹配的长度

capturedTexts() 捕捉到的字符串列表,   对应的还有captureCount() ,获取表达式中含有的捕捉组的数目

cap(int n) 第n个组的内容(0代表匹配自身)

cap()参数缺省值为0。

cap(0):表示匹配的整个文本的值。

cap(1):表示第1个圆括弧中的值。

cap(2):表示第2个圆括弧中的值。

pos(int n) 第n个组的位置(默认值为0)

QRegExp::indexIn() 搜索字符串以找到匹配的字串,返回索引值,失败返回-1

QRegExp::lastIndexIn() 同上,只是从后向前搜索

QString str = "(.*)=(.*)"; QRegExp rx_1(str); QString str_1 = ("a=100"); int pos = rx_1.indexIn(str_1); if(pos>=0) { qDebug()<

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

(?:pattern)是非捕获型括号 匹配pattern,但不捕获匹配结果

(pattern)是捕获型括号。 匹配pattern,匹配pattern并捕获结果,自动获取组号

(? pattern ) 匹配pattern, 匹配pattern并捕获结果,设置name为组名

例如,将(.*)=(.*)改为(?:.*)=(.*),qDebug()<

2.修改文本

将匹配到的字符串替换成其他字符串,例如将文本中的a=100修改为b=100

QString str = "a=100"; s.replace(QRegExp("(.*)="),"b=");

1

2

将匹配到的字符串内容进行自定义或替换,例如将文本中的a=100修改为100=a

Qstring str = "a=100"; s.replace(QRegExp("(.*)=(.*)"),"\2=\1");// \1就是相当于cap(1),表示第1个圆括弧中的值。

1

2

3.验证文本有效性

这里用到QRegExp::exactMatch来判断输入的字符是否符合正则表达式。

QRegExp::exactMatch() 判断字符串是否完全(从头到尾)匹配,返回真或假

QRegExp rx("\d"); //正则表达式 bool match = rx.exactMatch("8");//验证文本 if(match == true) { //表达式正确 return; } //表达式错误

1

2

3

4

5

6

7

8

9

对此,QRegExp都有相对应的函数方法,还有一些函数上面没有写出来,例如:

isValid();//判断正则表达式是否合法,合法返回true,否则返回false。

pattern();//获得正则本身

其他完整函数,大家可在文末点击官方文档查阅,当然,所有的函数方法都离不开一个核心就是正则表达式,我们来看下。

二.正则表达式

正则表达式是由表达式+量词+断言组成。

首先是表达式:

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

最简单的一个正则表达式就是字符,例如:

a 匹配字符a

b 匹配字符b

9 匹配数字9

表达式后面可以加量词,默认情况下,表达式会自动由{1,1}进行量化,即它应该只出现一次。在下面的列表中,E代表表达。表达式是一个字符,或者是一组字符的缩写,或者在方括号中是一组字符,或者在括号中是表达式。

例如:

E?匹配0次或者1次E

E+ 匹配1次或者多次E

E{3,6} 匹配至少3次,至多6次E

可以在表达式和量词的基础,加入断言,进行一些限制,例如我们想要匹配0-9,我们可以将正则表达式写为/d,如果我们想要匹配0-99,我们可以写成[0-9]{1,2},这时,字符串“89”符合,字符串“我们今年21岁了”也符合,因为里面有21,单独使用[0-9]{1,2},它会匹配包括出现在字符串中间的整数,如果想匹配的整数是整个字符串,那么就需要使用断言“^”和“$”了。

断言在正则表达式中出现的位置对文本进行一些声明,但不匹配任何字符。在以下列表中,E代表任何表达式。

除此之外,还有其他一些其他字符可以和表达式组合,方括号表示匹配方括号中包含的任何字符。上述字符集缩写可以出现在方括号中的字符集中。除字符集缩写和以下两个例外外,字符在方括号中没有特殊含义。

通配符匹配,大多数命令外壳(如bash或cmd.exe)都支持“文件通配”,即使用通配符标识一组文件的能力。所述setPatternSyntax()函数用于正则表达式和通配符模式之间切换。通配符匹配比完整的正则表达式简单得多,并且只有四个功能:

其他一些组合

三.链接及下载

github检验小程序源码

codechina检验小程序源码

检验小程序下载(关注免费下载)

qt正则表达式官方文档

很多人找不到相对应的文档,这里大家可以注意下,例如我是qt5的,那么只需要doc.qt.io/qt-5/xxxxxxx.html,这里xxxxxxx只需要写对应的类名即可找到对应类的文档,QRegExp类使用正则表达式提供模式匹配。

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1f5f69uzg8o23

Qt正则表达式类QRegExp(附检验小程序)

Qt 小程序 正则表达式

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Web前端知识点-认识浮动及清除浮动带来影响的简单方法
下一篇:华为张平安:发挥云云协同创新优势,加速全球初创企业快速成长
相关文章