QT 正则表达式的使用方法

     正则表达式用于字符串处理是很方便的,但是其规则往往容易学习基础,又很容易忘记,遂将遇到的问题和收集到的资料总结如下。如果对你有帮助,记得点赞、收藏、关注三连哦!

1.正则表达式的基础规则

表达式说明
^指字符串的开头
$指字符串的结尾
.匹配除了换行符意外的其他字符
表示匹配0次或一次
+表示匹配至少一次
*表示匹配0次或任意次
|或关系,表示左右两个表达式匹配任意一个都可以。如正则式为tom | jerry,匹配的字符串为tom and jerry,将会匹配到两个字符串,即tom和jerry。
\\指\本身,而非转义符。因为\在程序里转义的含义,所以如果要匹配\则必须使用\\。需要注意的一点是,外界的string输入的\在程序里其实是以\\的形式表现得,所以和正常转义一样;但是在QT编程时,单个\指转义,所以要实现匹配数字的功能,也就是匹配\d,则正则表达式形式要先将\转义,所以其表达形式为\\d。
\s匹配任意空白字符
\S匹配任意非空白字符
\d任意数字
\D匹配任意非数字
\w任意单字字符(字母、数字或下划线)
\W匹配任意非单字字符

\b

用以匹配单词边界,即一部分是\w范围,而另一部分是非、w范围,如@@@bbb,匹配结果为@b
[]用以包含一系列字符
[abc]表示abc三个单独的字符
[a-z]表示从a到z26个小写字母
[A-Z]表示从A到Z26个大写字母
[0-9]表示从0到9的数字
[A-Za-z0-9]表示所有大写小写字母和数字的集合
[^]用以包含除中括号之内字符的其他字符
[^abc]表示除abc之外的其他字符
{}修饰匹配字符长度的符号,需要匹配本身需要使用转义
{2}指匹配2个字符
{2,}指匹配至少两个字符
{2,6}指匹配2~6个字符
()表示一个子表达式,括号内内容作为一个子匹配。
(d+)abc即匹配至少一个d和abc
\xXX编号在0~255范围的字符
\uXXXX任何字符都可以使用\u再加上其编号的4位十六进制数表示

2.贪婪模式(尽可能匹配)和非贪婪模式(最小匹配)

       正则表达式的匹配默认是贪婪的,也就是尽可能的匹配,而这个匹配的次数可以使用上述介绍的{}、?、*、+进行限制。如果待检测文本为xyyyxyyyx,匹配结果举例如下:

正则式匹配结果
(x)(\w+)xyyyxyyyx
(x)(\w+)(x)xyyyxyyyx,也就是\w+匹配了yyyxyyy,其实其可以匹配到yyyxyyyx,只是为了让表达式成功匹配,其让出了最后的x。

      可以通过一些次数限制来改变这一结果,如使用?来进行尽可能少的匹配,即为非贪婪模式。与贪婪模式相似,如果匹配不成功,非贪婪模式会最小限度的再匹配一下。举例如下:

正则式匹配结果
(x)(\w+?)xy
(x)(\w+?)(x)xyyyx,为了让整个表达式成功,所以\x+?匹配了yyy

3.反向引用(\1,\2)

      ()内的表达式在匹配时,匹配结果会被正则表达式的匹配算法记录下来,是可以单独再使用的,如正则式为(\w)\1{4,},当待检测字符串为aa bbbb abcdefg ccccc 111121111 999999999时,匹配结果第一个为ccccc,第二个结果为999999999。

4.常用表达式

匹配目标正则式
匹配非负整数(正整数+0)^\d+$
匹配正整数^[0-9]*[1-9][0-9]*$
匹配非正整数(负整数+0)^((-\d+)|(0+))$
匹配负整数^-[0-9]*[1-9][0-9]*$
匹配整数^-?\d+$
匹配非负浮点数(正浮点数 + 0)^\d+(\.\d+)?$
匹配正浮点数^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
匹配非正浮点数(负浮点数 + 0)^((-\d+(\.\d+)?)|(0+(\.0+)?))$
匹配负浮点数^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
匹配浮点数^(-?\d+)(\.\d+)?$
匹配由26个英文字母组成的字符串^[A-Za-z]+$
匹配由26个英文字母的大写组成的字符串^[A-Z]+$
匹配由26个英文字母的小写组成的字符串^[a-z]+$
匹配由数字和26个英文字母组成的字符串^[A-Za-z0-9]+$
匹配由数字、26个英文字母或者下划线组成的字符串^\w+$
匹配email地址^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$
匹配url^[a-zA-z]+:(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$
匹配html tag<\s*(\S+)(\s[^>]*)?>(.*?)<\s*\\\1\s*>
数字,英文大小写字母,下划线,汉字^[a-zA-Z0-9_\u4e00-\u9fa5\\w]+$

5.QT正则表达式的使用方法

//需要的头文件
#include <QRegularExpression>

//正则类
QRegularExpression exp;
exp.setPattern(”\\d{2}“);

QString aaa = “abcd”;
QRegularExpressionMatch match = codeFormat.exp.match(aaa);
if(match.hasMatch()==true){
    QByteArray ccc;
    int lastIndex = match.lastCapturedIndex();
    if(lastIndex == 0){
        QString bbb = match.captured(0);
        ccc.append(bbb.toLatin1());
    }else if(lastIndex >0){
        for(int expI = 1 ; expI <= lastIndex;++expI)
        {
            QString bbb = match.captured(expI);
            qDebug()<<bbb;
            ccc.append(bbb.toLatin1());
        }
    }
}

6.关于汉子的过滤(UTF-8汉字的正则表达式)

//一般情况下使用(unicode通用)
\u4e00-\u9fa5

//qt下使用如下指令
\x{4e00}-\x{9fa5}

参考链接:

1. Qt正则表达式

2.UTF-8汉字正则表达式

  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值