Qt 正则表达式学习

  1. 正则表达式的基础语法看上一篇教程,或者搜菜鸟教程,讲的很详细,这里只补充在Qt里的应用
  2. 正则表达式在Qt中的应用场景

功能简介
验证测试字符串是否定义的符合规范
搜索强大精准的搜索
查找和替换查找指定字符替换为另一指定字符
字符串分割识别在哪里进行字符串分割
  1. 补充语法

表达式含义
\d匹配一个数字
\D匹配一个非数字
\s匹配一个空白字符
\S匹配一个非空白字符
\w匹配字母数字下划线
\W匹配非上述
\n第n个反向引用,可替代第n个()里查找到的内容,表示形式为\1,\2
  • \n 的使用说明

ref=/^(\d\d)(a-z){2}\1\2$/
string= 09s09s 12ss12 12ssss
result=09s09s
Explanation: \1等于第一个括号匹配到的内容,\2表示第二个括号匹配到的内容,这里可以直接利用前面的匹配结果进行匹配限制,私以为这就是为啥这称为 反向引用 了吧,反过来用结果作为限制元素。

  1. 直接上代码

(1) Qt5中引入了新的QRegularExpression类,实现了与Perl兼容的正则表达式,并在QRegExp基础上进行了很大改进,建议写Qt5使用QRegularExpression代替;
(2) 这里先写QRegExp类下的一些功能实现代码

//--------简单匹配
QRegExp rx("^\\d\\d? $");
rx.indexIn("5");//结果为0
rx.indexIn("a1");//结果为-1
//--------只匹配后缀不是ail的M
rx.setPattern("M(?!ail)");
QString str1="this is M,his Mail";
str1.replace(rx,"Mail"); //--------替换所有后缀不是ail的M 为Mail
//--------统计搜索到的结果字符串数量
QString str2="One Eric another Eirik, and an Ericsson. How many Eirik, Eric?";
QRegExp rx2("\\bEi? ri[ck]\\b");//匹配Eiric, Eirik, Eric, Erik等四个单词
int pos=0;
int count=0;
while(pos>=0)
{
	pos=rx2.indexIn(str2,pos);
	if(pos>=0){
   ++pos;
   ++count;
   }
}
  1. QRegularExpression 构造函数、相关属性、文本获取等操作

  • 构造函数
//---------111----------
QRegularExpression re("pattern"); //只定义模式
//---------222---------
 QRegularExpression re2("pattern");
re2.setPattern("another pattern")// 更改设置为其他模式
//---------333---------
QRegularExpression re1("pattern", QRegularExpression: CaseInsensitiveOption);//构造时设置一些附加搜索属性
//--------444---------
QRegularExpression re3("pattern");
re3.setPatternOptions(QRegularExpression::MultilineOption);// 后续设置其他搜索属性

  • 模式选择
常量描述
QRegularExpression::MultilineOption^匹配字符串的开始和新行的开始;$匹配任意行的结尾
QRegularExpression::CaseInsensetiveOption匹配目标字符串时不区分大小写
  1. 文本捕获(QRegExp也有类似操作,但因为提倡使用QRegularExpression,因此该部分内容不再做笔记)

(1) 如果不仅想搜索,还想获取搜索得到的结果,将搜索pattern用()包起来,则后面利用captured(n)可以获得;
(2) captured的捕获从1开始遍历。
直接上代码
QRegularExpression re("^(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)$");
QRegularExpressionMatch match=re.match("08/12/1985");
if(match.hasMatch())
{
	QString matched=match.captured(0);
	QString day=match,captured(1);
	QString month=match.captured(2);
	QStrng year=match.captured(3);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值