Qt中正则表达式的使用
QRegExp class
#头文件 #include
#.pro 文件中添加QT += core
有以下多个的公共函数接口

函数接口如何使用
正则表达式中的规则
regexp是由表达式、量词和断言构建的。
锚点断言 :^(起点) 和 $(结束点),这两个符号并不是用来匹配字符串的字符的,而是用来匹配字符串中的位置。
int indexIn(const QString &str, int offset = 0, QRegExp::CaretMode caretMode = CaretAtZero) const
作用:识别str是否匹配与表达式
offset: 从str字符串中的下标offset开始识别,offset默认是0
返回值:识别的起始位置,如果没有识别到为-1
bool exactMatch(const QString &str) const
作用:等同于indexln()
QString cap(int nth = 0) const
作用:返回捕获的文本字符串
QStringList QRegExp::capturedTexts() const
作用:返回捕获的文本字符串的列表。列表中的第一个字符串是整个匹配的字符串。 后续的每个列表元素都包含一个字符串,该字符串匹配regexp的一个(捕获的)子表达式。
int captureCount() const
作用:识别字符的数量
bool isValid() const
作用:判断该正则表达式是否合理
int matchedLength() const
作用:识别到的字符长度大小
常见符号的替代
| 符号 | 作用 | 例子 |
|---|---|---|
| {x,y} | 代表出现的次数,x为最少次数,y为最大次数 | [0-9]{1,2} |
| ? | 代表匹配前面的子表达式0次或者1次,等价于{0,1} | [0-9][0-9]? |
| * | 代表匹配前面的子表达式零次或多次,等价于{0,} | hello(world)* |
| + | 代表匹配前面的子表达式一次或多次,等价于{1,} | hello(world)+ |
| - | 代表字符的范围 | [a-z] |
| ^ | 如果^在[]里面,则子表达式进行反运算 | [^abc] |
| | | 或者 | (hello|bye) |
| \b | 断言只用作判断用而不会匹配任何字符 |
| 字符 | 简写 |
|---|---|
| [0-9] | \d |
| [^0-9] | \D |
| 所有的空白符号 | \s |
| 所有的非空白符好 | \S |
| 匹配一个换行符 | \n |
| 匹配一个制表符 | \t |
| 字符、数字、下划线 | \w |
| 非字符、数字、下划线 | \W |
项目实战
此次学习正则表达式,为了就是项目多个文本框需要输入一定的格式的文字,所以使用正则表达式去进行判断再好不过了。
1、比如判断文本框输入的颜色格式是否正确(0xFFFFFF)
正则表达式则写成:^(0x|0X)[0-9A-Fa-f]{6,6}$
QString content = ui->lineEdit->text();
QRegExp rx("^(0x|0X)[0-9A-Fa-f]{6,6}$");
if (rx.indexIn(content) == -1) {
QMessageBox::warning(this,"",tr("颜色格式为:0xFFFFFF"));
return;
}
2、比如判断文本框中输入的代码编号(yue12345678)。条件:不能少于两位数且不能有空格、逗号、下划线等符号,且末尾只能是至少是两位数字
小白实在想不出来用一个正则表达式去满足以上条件,只能通过两个表达式去判断末尾是否为两个数字。
QRegExp rxLen("\\d{2,15}$");
QRegExp rxchinese("^[1-9A-Za-z][A-Za-z0-9]*[0-9]{1,15}$");
if (rxLen.indexIn(str) != -1 && rxchinese.indexIn(str) != -1) {
QString numStr = rxLen.cap();
if (QString("%1").arg(numStr.toInt() + ui->sampleCountEdit->text().toInt()).size() != numStr.size()) {
QMessageBox::warning(this,"",tr("编号格式错误,编号不能有空格,下划线,中文等字符,如yue123456"));
return;
}
}
3、接下来写些常见需求表达式,比如
| 需求 | 表达式 |
|---|---|
| 输入框只能输入数字 | ^\d$ |
| 输入框只能输入字符 | ^[A-Za-z]+$ |
| 输入框只能数字和26个英文字母组成的字符串 | ^[0-9A-Za-z]+$ |
| 输入框只能输入中文 | ^[\u4e00-\u9fa5]{0,}$ |
| 输入框输入整数或者至多带两位小数的值 | ^[0-9]+(.[0-9]{0,2})?$ |
| 输入框输入负数或者整数、至多带两位小数的值 | ^(-)?[0-9]+(.[0-9]{0,2})?$ |
| 输入框输入日期格式 | ^[1-9]{1}[0-9]{3}-(0?[1-9]|1[0-2])-(0?[1-9]|[1-2][1-9]|3[0-1])$ |
更多推荐

所有评论(0)