QT正则表达式的使用

一、背景
使用QT开发项目时,经常需要去对字符串进行操作,一般来说我们都会想到的是使用自己写的逻辑+QString的一些函数进行实现。
其实qt给我们提供了一个更好的方式去实现,那就是QRegExp对象,使用正则表达式来操作字符串。
只要我们会用,能用好,就能在软件开发中起到事半功倍的效果,而不是苦逼自己去实现一段段自己都觉得不靠谱的代码。
对于正则表达式的使用做一下分类,主要分为以下类型(官网内容):

用法解释
1验证正则表达式可以测试子字符串是否满足某些标准,例如是整数或不包含空格。
2搜索正则表达式提供比简单的子字符串匹配更强大的模式匹配,例如,匹配单词mail、letter或communication之一,但不匹配单词email、mailman、mailer、letterbox等。
3搜索和替换正则表达式可以用不同的子字符串替换所有出现的子字符串,例如,用&替换所有出现的& 。除非&后面已经跟了一个amp; .
4字符串拆分正则表达式可用于标识字符串应在何处拆分,例如拆分制表符分隔的字符串。

二、正则表达式符号解释

例子解释
[abc]方括号中间是几个字母,表示a,b,c这三个单独的字符
[^abc]除了a,b,c以外的字符
[a-z]横杠表示范围,匹配a到z之间(包括a和z)的所有单个字符
[a-zA-Z]a到z、A到Z的所有单个字符
^在一行最前
$在一行的最后
\s匹配任意空白字符
\S匹配任意非空白的字符
\d任意数字
\D任意非数字
\w任意单字字符(字母、数字或下划线)
\W任意非单字字符
`(ab)`
a??代表0个或1个
a**代表0个或1个或多个
a++代表1个或多个
a{3}3个a
a{3,}3个或大于3个a
a{3,6}a的个数在3和6之间(包括3和6)

三、输入限制

用QlineEdit作为例子展示我们常用的一些代码。

1、只输入数字
可输入数字为0-9,限制数字个数为1-5个、

QRegExp regExp("^[0-9]{1,5}$");
ui->edit_pos->setValidator(new QRegExpValidator(regExp));

2、限制int和float输入
2.1整数部分限制为0-9输入,最多输入5个数字;小数部分限制1-9输入,只能输入一位。

QRegExp regExp("^[0-9]{1,5}([.][1-9]{1})?$");
ui->edit_pos->setValidator(new QRegExpValidator(regExp));

2.2带范围的整型输入:

ui->edit_pos->setValidator(new QIntValidator(0, 1000, this));

2.3带范围的浮点型输入:

lineEdit->setValidator(new QDoubleValidator(-180.0,180.0,6,this));

3、任意正整数限制输入
如限制0-120大小的数字输入,字符如下:

^([1-9]|([1-9][0-9])|([1-2][0-1][0-9]))$|^[1][2][0]$

4、限制数字和某些字符输入
如电话号码,限制0-9数字输入和“-”、“+”,格式如下:

QRegExp regSampleNumber("^[0-9.-.+]{30}$");

5、限制首个字符必须为某个符号
如限制首个字母必须为+、-或者0-9的字符,合适如下:

QRegExp regAge("[-|+|0-9][0-9.]{12}$");

“[-|+|0-9]”表示第一个字符只能是+、-或者0-9的字符,后面的[0-9.]{12}表示第二个字符开始只能输入0-9、.字符,最多12个字符。

6、限制中文输入
即除了中文其他都能输入:

QRegExp regAge("^([^\u4e00-\u9fa5]){0,16}$")

7、输入格式 (年-月-日):

ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$")));  

8、输入格式(月/日/年):

ui->lineEdit->setValidator(new QRegExpValidator(QRegExp("^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$" )));  

四、字符串验证
字符串验证就是验证对应的内容是否符合你依据正则表达式设定的规则,示例代码如下:

QRegExp rx("*.txt");
rx.setPatternSyntax(QRegExp::Wildcard);
rx.exactMatch("README.txt");        // returns true
rx.exactMatch("welcome.txt.bak");   // returns false

五、字符串截取
这个一般是用于在一段字符串中依据规则找到你需要的内容,示例代码如下:

QRegExp rx("(\\d+)(?:\\s*)(cm|inch)");
int pos = rx.indexIn("Length: 175cm");
if (pos > -1) 
{
    QString len = rxlen.cap(1); // "175"
    QString unit = rxlen.cap(2);  // "cm"
}
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值