Qt之正则表达式

本文详细介绍了Qt中正则表达式的语法,包括特殊字符、量词、字符集、分组与捕获、锚点字符、反向引用、预搜索、通用规则,以及常用的表达式属性设置,如Ignorecase、Singleline、Multiline、Global,并提供了各种匹配示例,如匹配数字、浮点数、邮箱地址等。
摘要由CSDN通过智能技术生成

一、语法
正则表达式是验证输入、从输入中提取数据以及对输入进行搜索和替换的强大工具,所谓正则表达式,regexp是一种利用模式匹配语言来描述字符串组成限制条件的方式;

   Qt 提供了一个QRegExp类,它实现了Perl风格的扩展正则表达式语言的大部分功能:

   正则表达式是一个字符的序列;

1) 特殊字符
• . (匹配任何字符)
• \n (匹配换行符)
• \f (匹配换页符)
• \xhhhh(匹配unicode字符,其对应码值范围从0x0000~0xFFFF之间的一个十六进制数hhhh)

2)量词:
• + (出现1次或者更多次,相当于 {1,},比如:”a+b”可以匹配 “ab”,”aab”,”aaab”…)
• ?(出现0次 或者 1 次,相当于 {0,1},比如:”a[cd]?”可以匹配 “a”,”ac”,”ad”)
• * (出现0次或者更多次,相当于 {0,},比如:”\^*b”可以匹配 “b”,”^^^b”… )
• {i,j} (出现至少i次 但是不超过j次)
• {n} (表达式重复n次,比如:”\w{2}” 相当于 “\w\w”;”a{5}” 相当于 “aaaaa”)
• {m,n}(表达式至少重复m次,最多重复n次,比如:”ba{1,3}”可以匹配 “ba”或”baa”或”baaa)
• {m,}(表达式至少重复m次,比如:”\w\d{2,}”可以匹配 “a12”,”_456”,”M12344”…)

3) 字符集 —- 在匹配表达式指定位置允许出现的字符集合,其中还预定义了几个字符集合:
• \s (匹配任何 空白字符)
• \S (匹配任何 非空白字符)
• \d (匹配任何 数字字符: 从‘0’ 到 ‘9’ )
• \D (匹配任何 非数字字符)
• \w (匹配任何”单词”字符,也就是任意的字母、数字或者下划线)
• \W (匹配任意的非单词字符)

字符集也可以使用方括号指定:
•[ABCES] (匹配这五个字符中的任意一个)
•[a-g] (匹配a-g中任意一个字符)
•[^xyz] (匹配任何除这三个字符以外的字符)

4) 分组和捕获字符 — () 可以用来把字符划分成组的特殊字符,字符组可以是向后引用的。也就是说,如果存在一个匹配,那么分组了的值可以通过各种方式捕获和访问;
一般一个正则表达式最多可以引用9个分组,即\1到\9这样的修饰;
此外还有一个QRegExp成员函数cap(int nth),它返回第n个分组(基于QString的形式返回).
举例5:表达式 “Tom|Jack” 在匹配字符串 “I’m Tom, he is Jack” 时,匹配结果是:成功;匹配到的内容是:”Tom”;匹配到的位置是:开始于4,结束于7。匹配下一个时,匹配结果是:成功;匹配到的内容是:”Jack”;匹配到的位置时:开始于15,结束于19。

 举例1:表达式 "(go/s*)+" 在匹配 "Let's go go go!" 时,匹配结果是:成功;匹配到内容是:"go go go";匹配到的位置是:开始于6,结束于14。

 举例2:表达式 "¥(/d+/.?/d*)" 在匹配 "$10.9,¥20.5" 时,匹配的结果是:成功;匹配到的内容是:"¥20.5";匹配到的位置是:开始于6,结束于10。单独获取括号范围匹配到的内容是:"20.5"。

5) 锚点字符 — 确定尝试进行匹配操作的边界
• 脱字符(^) 如果是正则表达式中的第一个字符,则说明匹配过程从字符串的开头处开始,
• 美元符($) 如果是正则表达式中最后一个字符,则表明匹配过程直到字符串的结尾才会结束;
• 单词边界 \b 非单词边界\B
进一步的文字说明仍然比较抽象,因此,举例帮助大家理解。

 举例1:表达式 "^aaa" 在匹配 "xxx aaa xxx" 时,匹配结果是:失败。因为 "^" 要求与字符串开始的地方匹配,因此,只有当 "aaa" 位于字符串的开头的时候,"^aaa" 才能匹配,比如:"aaa xxx xxx"。

 举例2:表达式 "aaa$" 在匹配 "xxx aaa xxx" 时,匹配结果是:失败。因为 "$" 要求与字符串结束的地方匹配,因此,只有当 "aaa" 位于字符串的结尾的时候,"aaa$" 才能匹配,比如:"xxx xxx aaa"。

 举例3:表达式 "./b." 在匹配 "@@@abc" 时,匹配结果是:成功;匹配到的内容是:"@a";匹配到的位置是:开始于2,结束于4。
 进一步说明:"/b" 与 "^" 和 "$" 类似,本身不匹配任何字符
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值