Qt 正则表达式介绍 QRegExp的使用

1.字符集缩写

在这里插入图片描述
在这里插入图片描述

2.量词

在这里插入图片描述

3.断言

在这里插入图片描述

4.通配符

在这里插入图片描述

5.使用示例

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QRegExp rx("^\\d\\d?$");           // 两个字符都必须为数字,第二个字符可以没有
    qDebug() << rx.indexIn("a1");            // 结果为-1,不是数字开头
    qDebug() << rx.indexIn("5");             // 结果为0
    qDebug() << rx.indexIn("5b");            // 结果为-1,第二个字符不是数字
    qDebug() << rx.indexIn("12");            // 结果为0
    qDebug() << rx.indexIn("123");           // 结果为-1,超过了两个字符
    qDebug() << "*******************";       // 输出分割符,为了显示清晰
    rx.setPattern("\\b(mail|letter)\\b");    // 匹配mail或者letter单词
    qDebug() << rx.indexIn("emailletter");   // 结果为-1,mail不是一个单词
    qDebug() << rx.indexIn("my mail");       // 返回3
    qDebug() << rx.indexIn("my email letter"); // 返回9
    qDebug() << "*******************";
    rx.setPattern("M(?!ail)");               // 匹配字符M,其后面不能跟有ail字符
    QString str1 = "this is M";
    str1.replace(rx, "Mail");                // 使用"Mail"替换匹配到的字符
    qDebug() << "str1: " << str1;            // 结果为this is Mail
    QString str2 = "my M,your Ms,his Mail";
    str2.replace(rx,"Mail");
    qDebug() << "str2: " << str2;            // 结果为my Mail,your Mails,his Mail
    qDebug() << "*******************";
    QString str3 = "One Eric another Eirik, and an Ericsson. "
                   "How many Eiriks, Eric?"; // 一个字符串如果一行写不完,换行后两行都需要加双引号
    QRegExp rx2("\\bEi?ri[ck]\\b");         // 匹配Eric或者Eirik
    int pos = 0;
    int count = 0;
    while (pos >= 0) {
        pos = rx2.indexIn(str3, pos);
        if (pos >= 0) {
            ++pos;                         // 从匹配的字符的下一个字符开始匹配
            ++count;                       // 匹配到的数目加1
        }
    }
    qDebug() << "count: " << count;        // 结果为3

    QRegExp rx3("*.txt");
    rx3.setPatternSyntax(QRegExp::Wildcard);
    qDebug() << rx3.exactMatch("README.txt");        // 结果为true
    qDebug() << rx3.exactMatch("welcome.txt.bak");   // 结果为false

    QRegExp rx4("(\\d+)");
    QString str4 = "Offsets: 12 14 99 231 7";
    QStringList list;
    int pos2 = 0;
    while ((pos2 = rx4.indexIn(str4, pos2)) != -1) {
        list << rx4.cap(1);                      // 第一个捕获到的文本
        pos2 += rx4.matchedLength();             // 上一个匹配的字符串的长度
    }
    qDebug() << list;                            // 结果12,14,99,231,7

    QRegExp rxlen("(\\d+)(?:\\s*)(cm|inch)");
    int pos3 = rxlen.indexIn("Length: 189cm");
    if (pos3 > -1) {
        QString value = rxlen.cap(1);            // 结果为189
        QString unit = rxlen.cap(2);             // 结果为cm
        QString string = rxlen.cap(0);           // 结果为189cm
        qDebug() << value << unit << string;
    }

    QRegExp rx5("\\b(\\w+)\\W+\\1\\b");
    rx5.setCaseSensitivity(Qt::CaseInsensitive); // 设置不区分大小写
    qDebug() << rx5.indexIn("Hello--hello");     // 结果为0
    qDebug() << rx5.cap(1);                      // 结果为Hello

    QRegExp rx6("\\b你好\\b");                  // 匹配中文
    qDebug() << rx6.indexIn("你好");            // 结果为0
    qDebug() << rx6.cap(0); // 整个字符串完全匹配,使用cap(0)捕获,结果为“你好”

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级D洋葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值