【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-9 1\d{2}
200-249 三位数,最高位取值为2,十位取值0-4,个位取值0-9 2[0-4]\d
250-255 三位数,最高位取值为2,十位取值5,个位取值0-5 25[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++中"\"在字符串中表示要用"\\"

猜你喜欢

转载自blog.csdn.net/WL0616/article/details/129028042