QT(2)-QRegExp

1 正则表达式

  1. 正则表达式——详情版+常用表达式
  2. Qt中正则表达式(常用)
  3. 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);//0
qDebug()<<regExp.captureCount();//3
qDebug()<<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的更多相关文章

  1. 【大话QT之十二】基于CTK Plugin Framework的插件版本号动态升级

    应用需求: 某些场景下我们可能面临这种问题,在执行着的应用程序不能终止的情况下,升级某个功能(或添,或减.或改动).在不採用CTK Plugin Framework插件系统架构的情况下这将是非常困难的 ...

  2. [Qt基础内容-08] Qt中MVC的M(Model)

    Qt中MVC的M(Model)简单介绍 Qt有自己的MVC框架,分别是model(模型).view(视图).delegate(委托),这篇文章,简单的介绍以下Qt中有关model(模型)的类以及一些基 ...

  3. Chapter2:Qt5模板库,工具类及控件

    2.1 字符串类 QString类保存16位Unicode值,提供了丰富的操作,查询和转换等函数.  (1):QString提供了一个二元的"+"操作符用于组合两个字符串  (2) ...

  4. 使用PyQt4制作一个正则表达式测试小工具

    最近在做一些网络爬虫的时候,会经常用到正则表达式.为了写出正确的正则表达式,我经常在这个网站上进行测试:Regex Tester.这个页面上面一个输入框输入正则表达式,下面一个输入框输入测试数据,上面 ...

  5. QT5:先导篇 正则表达式

    一.简介 使用正则表达式可以快速完成处理字符串的一些操作,如验证 查找 替换和分割 Qt的QRegExp类是正则表达式的表示类,它基于Perl的正则表达式语言 正则表达式由表达式(expression ...

  6. qt QRegExp使用(搬运工)

    设置正则表达式. 类似下面的 QRegExp 这里的用法就是用来检测QString等字符串错误的,例如文件名里面最好就不出现<>|/\:等,所以可以如下定义QRegExp rx(" ...

  7. Qt实现端口扫描器

    首先展示一下效果: 界面通过Qt设计师做出来的. 主要有两个类. 首先主函数: #include "mainwindow.h" #include <QApplication& ...

  8. Qt:正则表达式语法:

         正则表达式是验证输入.从输入中提取数据以及对输入进行搜索和替换的强大工具,所谓正则表达式,regexp是一种利用模式匹配语言来描述字符串组成限制条件的方式;        Qt 提供了一个Q ...

  9. 【QT】C++ GUI Qt4 学习笔记2

    Go To Cell 利用QT Desinger做好界面后加入的代码有 gotocelldialog.h #ifndef GOTOCELLDIALOG_H #define GOTOCELLDIALOG ...

  10. 【QT】C++ GUI Qt4 学习笔记4

    感觉这本书的顺序设计的太不合理了,出现的最多的一句话就是后面会讲.按照使用的顺序讲不行吗?搞得代码都运行不了. 我决定先直接跳到73页,子类化QTableWidgetItem这一节.因为前面功能的实现 ...

随机推荐

  1. 超详细整合SSM框架--(Spring + Spring MVC + MyBatis)

    超详细整合SSM框架--(Spring + Spring MVC + MyBatis) 阅读该文章之前首先要清楚Spring框架,SpringMVC框架,Mybatis框架. SSM框架,是Sprin ...

  2. 快速切换 nodejs 的版本

    最近在开发一个常驻进程.定时任务统一调度系统,以应对开发在进程管理方面遇到的各种复杂问题. 组里开发项目,一般来说是一个人承包整个项目,包括调度器设计,还有后台系统.我还有一部分工作,是队列相关的信息 ...

  3. 基于 Spark 的物流企业数据仓库 的设计与实现

    1.设计和实现了一种基于 Spark 的分布式 ETL 系统,包括利用 Spark 抽取.转换清洗和加载数据的具体过程. 2.设计和实现了基于 Spark 的物流企业数据仓库,包括物流企业数据仓库的分 ...

  4. quarkus实战之五:细说maven插件

    quarkus的maven插件非常重要,管理和构建工程时都离不开,本篇就来一起了解和掌握它 欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com ...

  5. GitLab 无仓库 中了勒索病毒

    坑爹的记录一下,并没有解决 Gitlab 昨天(2021-11-29)打开之后看不到项目了,下面这个吊样子 最后发现中病毒了,一堆的这个吊毛文件,复制一个打开看了一下 你别说这个黑客网页写的还不错,这 ...

  6. 【技术积累】Linux中的命令行【理论篇】【二】

    ag命令 命令介绍 ag命令是一个用于在Linux系统中进行文本搜索的工具.它是基于Silver Searcher的改进版本,具有更快的搜索速度和更强大的功能. ag命令的基本用法是在指定的目录中搜索 ...

  7. .Net Core 3.0 对 MongoDB 的多条件查询(两种)操作

    前言   在日常开发中,偶尔会用到 MongoDB 的数据操作,也花费了一些时间调试,因此在此处记录一下,共同进步. 废话少说,出招吧! 正文 2.1 准备工作 首先需要引入 .Net 平台链接 Mo ...

  8. Controller 层代码技巧

    Controller 层代码技巧 前言 本篇主要要介绍的就是controller层的处理,一个完整的后端请求由4部分组成: 接口地址(也就是URL地址) 请求方式(一般就是get.post,当然还有p ...

  9. python如何提取浏览器中保存的网站登录用户名密码

    python如何提取Chrome中的保存的网站登录用户名密码? 很多浏览器都贴心地提供了保存用户密码功能,用户一旦开启,就不需要每次都输入用户名.密码,非常方便.作为python脚本,能否拿到用户提前 ...

  10. ETL之apache hop系列3-hop Server环境部署与客户端发布管道工作流

    前言 该文档主要是apache hop 2.5的 Windows 10和Linux docker环境部署和客户端发布工作流和管道的相关内容 不使用Docker直接使用应用程序包,下载压缩包文件后,需要 ...