【QT】正则匹配 与 QRegExp

1. 正则表达式的基本用法

字 符描 述
[ ]匹配[ ]中的所有字符。如[123]就是匹配1或2或3,匹配“2569431012”就是匹配其中所有的1或2或3数字,即2、3、1、1、2,不是匹配连续的123。
[^ ]匹配[ ]以外的所有字符。如[^ABC],表示匹配除了ABC以外的所有字符。
[0-9]表示一个区间。
\d匹配一个数字字符。等价于[0-9]。
\D匹配一个非数字字符。等价于[^0-9]。
.匹配除换行符(\n、\r)之外的任何单个字符。若要匹配".“,例如IP地址的匹配,则必须使用转义字符”\."。
\w匹配字母、数字、下划线。等价于[A-Za-z0-9]。
^匹配输入字符串的开始位置。如果在方括号表达式中使用时,如[^ABC],表示匹配除了ABC以外的所有字符。要匹配 ^ 字符本身,请使用转义字符 “\^”。
$匹配输入字符串的结尾位置。如果设置了 QRegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用转义字符 “\$”。
+匹配前面的字符或表达式一次或多次,等价于{1,}。
*匹配前面的字符或表达式零次或多次,等价于{0,}。如 [0-9]* 表示任意多个数字
?匹配前面的字符或表达式零次或一次,等价于{0,1}。
{n}n是一个非负数,表示匹配前面的字符或表达式n次。
{n,}表示至少匹配前面的字符或表达式n次
{n,m}n和m都为非负数,表示至少匹配前面的字符或表达式n次,最多匹配m次。
\b匹配一个单词边界,即字与空格间的位置
\B非单词边界匹配

注意:C++中"\"在字符串中表示要用"\\"

2. 常用的正则表达式

描述表达式
数字^[0-9]*$
n位的数字^\d{n}$
至少n位的数字^\d{n,}$
m-n位的数字^\d{m,n}$
零和非零开头的数字^(0|[1-9][0-9]*)$
D类IP:224.0.0.0~239.255.255.255^(22[4-9]|23[0-9])(\.((\d)|([1-9]\d)|(1\d{2})|(2[0-4]\d)|(25[0-5]))){3}$
IP((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))).){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))

3. IP地址的正则表达式

IPv4地址格式,总长度 32位=4段*8位,每段之间用.分割, 每段都是0-255之间的十进制数值。
将0-255用正则表达式表示,可以分成一下几块来分别考虑:

取值区间特点正则写法
0-9一位数,只有个位,取值是0~9\d
10-99两位数,十位取值1-9,个位取值是0~9[1-9]\d
100-199三位数,最高位取值为1,十位取值0-9,个位取值0-91\d{2}
200-249三位数,最高位取值为2,十位取值0-4,个位取值0-92[0-4]\d
250-255三位数,最高位取值为2,十位取值5,个位取值0-525[0-5]

所以IP地址的正则表示法如下:

((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))).){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))

4. QRegExp的基本用法

例如:为一个LineEdit限制输入只为数字

QRegExp regExp("\\d*");
QValidator* pValidator = new QRegExpValidator(regExp, this);
ui->lineEdit->setValidator(pValidator);

例如:正则匹配 D类IP:224.0.0.0~239.255.255.255

QRegExp regExp("^(22[4-9]|23[0-9])(\\.((\\d)|([1-9]\\d)|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))){3}$");
ui->lineEdit->setValidator(new QRegExpValidator(regExp, this));

注意:C++中"\"在字符串中表示要用"\\"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值