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++中"\"在字符串中表示要用"\\"