QT(2)-QRegExp

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 插入符号永远不匹配。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,188评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,464评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,562评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,893评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,917评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,708评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,430评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,342评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,801评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,976评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,115评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,804评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,458评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,008评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,135评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,365评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,055评论 2 355

推荐阅读更多精彩内容

  • 第五章******************************************************...
    fastwe阅读 683评论 0 0
  • js语言学习 1.基本概念: 1.js是区分大小写的 2.标识符命名规则: 第一个字符必须是一个字母、下划线(_)...
    NSQAQ阅读 1,262评论 1 17
  • 前言:这是学习阮一峰老师的《ECMAScript6 入门》所做的笔记。开源书籍链接地址http://es6.rua...
    呆毛和二货阅读 278评论 0 0
  • 介绍[https://developer.mozilla.org/zh-CN/docs/Web/JavaScrip...
    ByePast阅读 823评论 0 1
  • ES全称ECMAScript,ECMAScript是ECMA制定的标准化脚本语言 ES6新特性(2015) ES6...
    考拉程序媛阅读 371评论 0 0