QT(2)-QRegExp
QT(2)-QRegExp
1 正则表达式
- 正则表达式——详情版+常用表达式
- Qt中正则表达式(常用)
- Qt 正则表达式介绍 QRegExp的使用
2 QRegExp
2.1 indexIn
int indexIn(const QString &str, int offset = 0, QRegExp::CaretMode caretMode = CaretAtZero) const
尝试从位置偏移量(默认为0)在str中查找匹配。如果offset为-1,则从最后一个字符开始搜索;如果-2,在最后一个字符的旁边;等
返回第一个匹配的位置,如果没有匹配则返回-1。
caretMode参数可以用来指示^应该在索引0处匹配还是在偏移量处匹配。
QString regexStr = "^[0-9a-zA-Z_]+@[0-9a-zA-Z]+(\\.[a-zA-Z]+)+$";QRegExp regExp(regexStr);QString str = "123@qq.com";if(regExp.indexIn(str)>=0){qDebug()<<"This is email";}
2.2 captureCount()
int QRegExp::captureCount() const
返回正则表达式中包含的捕获数。
2.3 capturedTexts()
QStringList QRegExp::capturedTexts() const
返回捕获的文本字符串的列表。
列表中的第一个字符串是整个匹配的字符串。随后的每个列表元素都包含一个与regexp的(捕获的)子表达式匹配的字符串。
2.4 cap
QString QRegExp::cap(int *nth* = 0) const
返回第n个子表达式捕获的文本。整个匹配的索引为0,括号内的子表达式的索引从1开始(不包括非捕获括号)。
QString regexStr = "^([0-9a-zA-Z_]+)(@[0-9a-zA-Z]+)(\\.[a-zA-Z]+)+$";QRegExp regExp(regexStr);QString str = "123@qq.com";if(regExp.indexIn(str)>=0){qDebug()<<regExp.indexIn(str);//0qDebug()<<regExp.captureCount();//3qDebug()<<regExp.capturedTexts();//"123@qq.com", "123", "@qq", ".com"qDebug()<<regExp.cap(0);//"123@qq.com"qDebug()<<regExp.cap(1);//"123"qDebug()<<regExp.cap(2);//"@qq"qDebug()<<regExp.cap(3);//".com"}
2.5 caseSensitivity()
Qt::CaseSensitivity QRegExp::caseSensitivity() const
如果regexp匹配时区分大小写,则返回Qt::CaseSensitive;否则返回Qt::CaseInsensitive。
2.6 isValid()
bool QRegExp::isValid() const
如果正则表达式有效,则返回true;否则返回false。无效的正则表达式永远不匹配。
模式[a-z是无效模式的一个例子,因为它缺少右方括号。
注意,regexp的有效性还可能取决于通配符标志的设置,例如*.html是有效的通配符regexp,但却是无效的完整regexp。
2.7 errorString()
QString QRegExp::errorString() const
返回一个文本字符串,解释为什么regexp模式是无效的情况为;否则返回“没有发生错误”。
QString regexStr1 = "^[a-z$";QRegExp regExp1(regexStr1);if(!regExp1.isValid())//不是有效的正则表达式qDebug()<<regExp1.errorString();//"unexpected end"(意外结束)
2.8 escape
[static] QString QRegExp::escape(const QString &*str*)
返回字符串str,其中每个regexp特殊字符都用反斜杠转义。特殊字符是 $, (,), *, +, ., ?, [, ,], ^, {, | 和}。
s1 = QRegExp::escape("bingo"); // s1 == "bingo"
s2 = QRegExp::escape("f(x)"); // s2 == "f\\(x\\)"
这个函数对于动态构造regexp模式很有用:
QRegExp rx("(" + QRegExp::escape(name) + "|" + QRegExp::escape(alias) + ")");
2.9 exactMatch
bool QRegExp::exactMatch(const QString &str) const
如果str与此正则表达式完全匹配,则返回true;否则返回false。您可以通过调用matchedLength()来确定字符串的匹配程度。
对于给定的regexp字符串R, exactMatch(“R”)相当于indexIn(“^R$”),因为exactMatch()有效地将regexp封闭在字符串的开头和字符串锚的结尾,只是它以不同的方式设置matchedLength()。
例如,如果正则表达式是蓝色的,那么exactMatch()只对输入蓝色返回true。对于输入bluebell、blutak和lightblue, exactMatch()将返回false, matchedLength()将分别返回4、3和0。
2.10 isEmpty()
bool QRegExp::isEmpty() const
如果模式字符串为空则返回true;否则返回false。
如果你调用exactMatch()在空字符串上使用空模式,它将返回true;否则将返回false,因为它操作的是整个字符串。如果在任何字符串上调用带有空模式的indexIn(),它将返回开始偏移量(默认为0),因为空模式匹配字符串开始的’ empty '。在这种情况下,matchedLength()返回的匹配长度将为0。
2.11 matchedLength()
int QRegExp::matchedLength() const
返回最后一个匹配字符串的长度,如果没有匹配则返回-1。完全符合正则表达式的字符串长度是多少
QString regexStr = "^([0-9a-zA-Z_]+)(@[0-9a-zA-Z]+)(\\.[a-zA-Z]+)+$";
QRegExp regExp(regexStr);
QString str = "123@qq.com****";
qDebug()<<regExp.exactMatch(str);//false
qDebug()<<regExp.matchedLength();//10
2.12 lastIndexIn
int QRegExp::lastIndexIn(const QString &*str*, int *offset* = -1, QRegExp::CaretMode *caretMode* = CaretAtZero) const
尝试从位置偏移量在str中反向查找匹配。如果offset为-1(默认值),则从最后一个字符开始搜索;如果-2,在最后一个字符的旁边;等。
返回第一个匹配的位置,如果没有匹配则返回-1。
caretMode参数可以用来指示^应该在索引0处匹配还是在偏移量处匹配。
虽然是const,但这个函数设置了matchedLength()、capturedTexts()和pos()。
警告:向后搜索比向前搜索慢得多。
2.13 pattern()
QString QRegExp::pattern() const
返回正则表达式的模式字符串。模式有正则表达式语法或通配符语法,具体取决于patternSyntax()。
QString regexStr = "^([0-9a-zA-Z_]+)(@[0-9a-zA-Z]+)(\\.[a-zA-Z]+)+$";
QRegExp regExp(regexStr);
qDebug()<<regExp.pattern();//"^([0-9a-zA-Z_]+)(@[0-9a-zA-Z]+)(\\.[a-zA-Z]+)+$"
2.14 patternSyntax()
QRegExp::PatternSyntax QRegExp::patternSyntax() const
返回正则表达式使用的语法。默认值是QRegExp::RegExp。QRegExp::PatternSyntax见3.0
2.15 pos
int QRegExp::pos(int *nth* = 0) const
返回搜索字符串中第n个捕获文本的位置。如果n为0(默认值),pos()返回整个匹配的位置。
QRegExp rx("/([a-z]+)/([a-z]+)");rx.indexIn("Output /dev/null"); // returns 7 (position of /dev/null)rx.pos(0); // returns 7 (position of /dev/null)rx.pos(1); // returns 8 (position of dev)rx.pos(2); // returns 12 (position of null)
2.16 setCaseSensitivity
void QRegExp::setCaseSensitivity(Qt::CaseSensitivity cs)
将区分大小写的匹配设置为cs。
Constant | Value |
---|---|
Qt::CaseInsensitive | 0 |
Qt::CaseSensitive | 1 |
2.17 setPattern
void QRegExp::setPattern(const QString &pattern)
将模式字符串设置为pattern。区分大小写、通配符和最小匹配选项没有改变。
QString regexStr = "^([0-9a-zA-Z_]+)(@[0-9a-zA-Z]+)(\\.[a-zA-Z]+)+$";QRegExp regExp;regExp.setPattern(regexStr);//等同于QRegExp regExp(regexStr);
2.18 setPatternSyntax
void QRegExp::setPatternSyntax(QRegExp::PatternSyntax syntax)
设置正则表达式的语法模式。默认值是QRegExp::RegExp。
将语法设置为QRegExp::Wildcard 可以实现简单的壳状QRegExp::Wildcard匹配。例如,r*.txt在通配符模式下匹配字符串readme.txt,但不匹配readme。
将语法设置为QRegExp::FixedString意味着模式被解释为普通字符串。特殊字符(例如,反斜杠)不需要转义。
2.19 swap
void QRegExp::swap(QRegExp &*other*)
将正则表达式other替换为该正则表达式。这个操作非常快,从来不会失败。
3 QRegExp::PatternSyntax
用于解释模式含义的语法。
内容 | 值 | 描述 |
---|---|---|
QRegExp::RegExp | 0 | 丰富的类Perl-like模式匹配语法。这是默认设置。 |
QRegExp::RegExp2 | 1 | 类似RegExp,但带有贪婪量词。(在Qt 4.2中引入。) |
QRegExp::Wildcard | 2 | 这提供了一个简单的模式匹配语法,类似于shell(命令解释器)用于"file globbing"的语法。参见QRegExp通配符匹配。 |
QRegExp::WildcardUnix | 3 | 这与通配符类似,但具有Unix shell的行为。通配符可以用字符""转义。 |
QRegExp::FixedString | 4 | 模式是一个固定的字符串。这相当于在字符串上使用RegExp模式,其中所有元字符都使用escape()进行转义。 |
QRegExp::W3CXmlSchema11 | 5 | 该模式是由W3C XML Schema 1.1规范定义的正则表达式。 |
4 QRegExp::CaretMode
CaretMode枚举定义了正则表达式中插入符号(^)的不同含义。取值为:
内容 | 值 | 描述 |
---|---|---|
QRegExp::CaretAtZero | 0 | 插入符号对应于搜索字符串中的索引0。 |
QRegExp::CaretAtOffset | 1 | 插入符号对应于搜索的起始偏移量。 |
QRegExp::CaretWontMatch | 2 | 插入符号永远不匹配。 |
QT(2)-QRegExp相关推荐
- Qt通过QRegExp类来实现输入的有效性判断与正则表达式的学习
在做项目的过程中我们经常会遇到输入数字.字母这类的问题,有时候需要判断用户输入的信息是否按要求输入,这里就用到了正则表达式,Qt中QRegExp是正则表达式类.QRegExpValidator类是用来 ...
- qmake language qt 工程文件 配置文件 .pro .prl .prf .pri 词法 语法 for循环 判断语句 函数定义
目录 词法 string 1.数据类型 2.特殊处理的内置变量 3.转义字符 关键字:包括语法关键字.特殊变量 语法 变量 变量.属性.环境变量 变量使用 全局变量作用域 函数定义和使用 判断语句和循 ...
- QT教程:QSortFilterProxyModel代理实现自定义排序、联合过滤
1. QsortFilterProxyModel介绍 QsortFilterProxyModel类用来为model和view之间提供强大的排序和过滤支持.将模型排序或者过滤后在视图上显示,并且无需对模 ...
- MSN P2P资料转载
找到一份关于MSN P2P协议的转载.赶快保存下来,还有一个,URL已经无效了. /* msnp2p.cpp - msn p2p protocol Copyright (c) 2003 by ...
- PyQt5 密码输入框
大栗子 实现了三种密码输入框的方式: 1.输入的密码不可见: 2.输入的密码可见,但是鼠标点击其他控件后,密码不可见: 3.输入的密码不可见,同时为了更加的安全,屏蔽了鼠标右键.禁用复制.粘贴快捷键. ...
- QT5——模版库、工具类及控件
文章目录 qt模版库 字符串类 操作字符串 查询字符串数据 字符串的转换 容器类 QList类.QLinkedList类和QVector类 QList类 QLinkedList类 QVector类 J ...
- QTreeView使用总结11,数据过滤,使用代理model,简单过滤
1,简介 有时候需要对tree内的数据按一些条件进行过滤显示,比如按搜索条件过滤,这时候就用到了代理model. 通常使用Qt提供的 QSortFilterProxyModel 类,该类实现了常见的按 ...
- QSortFilterProxyModel实现排序、过滤
1. QSortFilterProxyModel介绍 QSortFilterProxyModel类用来为model和view之间提供强大的排序和过滤支持.将模型排序或者过滤后在视图上显示,并且无需对模 ...
- PyQt6 和 PyQt5 的差异
PyQt6 和 PyQt5 的差异 PyQt6 是 PyQt5 的下一个版本,但两个版本的写法基本上其实大同小异,这篇教学会介绍 PyQt6 和 PyQt5 有何差异. 快速预览: .exec_() ...
最新文章
- Linux-LNMP(静态元素不记录日志和过期时间,防盗链,解析php,代理,支持ssl)
- Dalvik VM进程系统(二):分析Zygote的启动过程
- 对quake3源代码的学习与研究初步的计划
- 【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 )
- H5开发的web APP和原生APP的区别
- Python:目录和文件的操作模块os.path和OS常用方法
- 阿里云管理Android项目,Android-Sophix
- java minor gc_Java Minor发布计划再次进行了调整
- jQuery -- 目录
- Quartz-CronTrigger解读
- Android JNI HIDL 简单实例学习
- 2022智源大会议程丨AI平台与系统专题论坛
- 超人能一拳把某个人打出地球吗?
- 学历证书查询唯一网站
- 使用Flow forecast进行时间序列预测和分类的迁移学习介绍
- 蝴蝶效应、青蛙现象、鳄鱼法则、鲇鱼效应、羊群效应、刺猬法则
- 数学公式大全--极限、微分、积分
- 数据中心架构,如何节省运营成本,机房冷却方面减少压力?
- Surely Vue-去除水印
- Qt 使用QNetworkAccessManager实现Http操作