qt有QRegExp类和QRegularExpression类,目前QRegExp类已弃用。正则表达式是一种特殊的字符串模式,用来描述匹配一组字符的规则。
下面是一些基本的正则表达式元字符:
.
匹配除换行符外的任何一个字符;^
匹配字符串的开头;$
匹配字符串的结尾;[]
匹配括号中任意一个字符;[^]
不匹配括号中任意一个字符;*
匹配前面的字符零次或多次;+
匹配前面的字符一次或多次;{m,n}
匹配前面的字符至少 m 次,最多 n 次;?
匹配前面的字符零次或一次;()
捕获匹配的子字符串;\d
匹配任意一个数字字符;\D
匹配任意一个非数字字符;\w
匹配任意一个单词字符;\W
匹配任意一个非单词字符;\s
匹配任意一个空格字符;\S
匹配任意一个非空格字符;\b
匹配单词的边界。
|----------|------------|
| 表达式 | 说明 |
| \r, \n | 代表回车和换行符 |
| \t | 制表符 |
| \\ | 代表 "\" 本身 |
| \^ | 匹配 ^ 符号本身 |
| \ | 匹配 符号本身 |
例子:
QRegularExpression re("\\d{3}([a-z]+|[A-Z]+)");
这个正则表达式可以分解为以下几个部分:
\\d{3}:
\\d 匹配任意数字 (等价于 [0-9])
{3} 表示前面的元素(\d)必须出现恰好3次
这部分匹配"123", "456"等三位数字
([a-z]+|[A-Z]+):
这是一个分组,包含一个"或"条件(|)
[a-z]+ 匹配一个或多个小写字母
[A-Z]+ 匹配一个或多个大写字母
注意这里不是混合大小写,要么全是小写,要么全是大写
整体匹配示例:
"123abc" (匹配)
"456XYZ" (匹配)
"789AbC" (不匹配,因为混合了大小写)
"12ab" (不匹配,因为只有2位数字)
QRegularExpression re("^(\\d{2})/(\\d{2})/(\\d{4})$");
这个正则表达式用于匹配日期格式,分解如下:
^ 表示字符串的开始
(\\d{2}):
第一个捕获组
匹配2位数字 (如月份)
/ 匹配字面的斜杠字符
(\\d{2}):
第二个捕获组
匹配2位数字 (如日期)
/ 匹配字面的斜杠字符
(\\d{4}):
第三个捕获组
匹配4位数字 (如年份)
$ 表示字符串的结束
整体匹配示例:
"12/31/2020" (匹配,3个组分别捕获"12", "31", "2020")
"01/01/2000" (匹配)
"123/45/6789" (不匹配,因为第一部分有3位数字)
"12-31-2020" (不匹配,因为分隔符不是斜杠)
这个正则表达式常用于匹配"MM/DD/YYYY"格式的日期,但需要注意:
它不会验证日期的有效性(如"99/99/9999"也会匹配)
它强制要求斜杠作为分隔符
每个数字部分的长度严格限制(2位/2位/4位)