学习QT之算法和正则表达式
一、QT5 常用算法
函数 | 功能 |
---|---|
qAbs(value) | 返回value的绝对值 |
qMax(value1,value2) | 返会value1和value2中较大的值 |
qRound(value) | 返回与一个浮点数最接近的整数值,即四舍五入返回一个整数值 |
qSwap(value1,value2) | 交换value1和value2的值 |
二、基本的正则表达式
使用正则表达式可以方便地完成处理字符串的一些操作,如验证、查找、替换和分割等。Qt的QRegExp类是正则表达式的表示类,它基于Perl的正则表达式语言,完全支持Unicode.
正则表达式由表达式、量词和断言组成。
(1)、最简单的表达式是一个字符。字符集可以使用表达式如"[AEIOU]",表示匹配所有的大学元音字母;使用"[ ^ AEIOU]",表示匹配所有的非元音字母,即辅音字母;连续的字符集可以使用表达式如"[a-z]",表示匹配所有的小写英文字母。
(2)、量词说明表达式出现的次数,如"x[1,2]",表示“x”可以至少有一个,至多有两个。
在计算机语言中,标识符通常要求一字母或下划线开头,后面可以说字母、数字和下划线。满足条件的标识符表示为:[A-Za-z]+[A-Za-z_0-9]*
其中,表达式中的"+“表示”[A-Za-z]“至少出现一次,可以出现多次;”*"表示[A-Za-z_0-9]可以出现零次或多次。
正则表达式的表达式如下:
表达式 | 说明 |
---|---|
[] | 包含一系列字符 |
[^] | 包含之外一系列字符 |
\r,\n | 代表回车和换行符 |
\t | 制表符 |
\ \ | 表达" \ "本身 |
^ | 匹配^符号本身 |
\ $ | 匹配$符号本身 |
例如:[A-Za-z_0-9]匹配字母数字和下划线;[ ^a-z]匹配除小写字母外的所有所有字符
正则表达式的量词如下:
量词 | 含义 | 量词 | 含义 |
---|---|---|---|
E? | 匹配0次或1次 | E{n,} | 至少匹配n次 |
E+ | 匹配1次或多次 | E{,m} | 最多匹配m次 |
E* | 匹配0次或多次 | E{n,m} | 至少匹配n次,最多匹配m次 |
E{n} | 匹配n次 |
例如:\b[A-Z]+[a-z_0-9]{,3}\b匹配大写字母开头一个或多个,然后最多3个小写字母或下划线或数字
正则表达式的断言如下:
符号 | 含义 | 符号 | 含义 |
---|---|---|---|
^ | 表示在字符串开头进行匹配 | \B | 非单词边界 |
$ | 表示在字符串结尾进行匹配 | (?=E) | 表示表达式后紧随E才匹配 |
\b | 单词边界 | (?!E) | 表示表达式后不跟随E才匹配 |
例如:^ [abc] [0-9]$匹配以abc中任意一个开头,数字结尾的字符串
元字符如下:
元字符 | 说明 |
---|---|
. | 匹配除了换行符意外的任意字符 |
\w | 匹配字母、数字、下划线、汉字 |
\s | 匹配任意的空白符 |
\b | 单词的开始或结尾 |
\ ~ | 匹配字符串的开始 |
$ | 匹配字符串的结束 |
\ba\w*\b:匹配以字母a开头的单词(\ba),然后是任意数量的字母或数字(\w *),最后是单词结束处(\b)。
\b\w{6}\b:匹配刚好6个字符的单词。
三、在QT中使用正则表达式
#include<QRegExp>
#include<QRegExpValidator>
QRegExp regexp("[A-Za-z][0-9][1-9]{0,2}");
//匹配第一个为字母,第二个为数字,接下来的0-2个为非零数字
ui->lineEdit->setValidator(new QRegExpValidator(regexp,this));
ui->okButton->setEnable(ui->lineEdit->hasAcceptableInput());