Qt之正则表达式 - QRegExp

转载 2012年03月21日 10:49:25
 Qt里对大名鼎鼎的正则表达式有很好的支持,使用QRegExp类,你可以非常快的完成对文本的验证、数据提取、替换。Qt的SDK包里还提供了regexp的GUI小工具,方便你对正则表达式的验证。

本文在Qt4.5.3下验证通过。

用正则表达式验证文本有效性

你可以使用QRegExp::exactMatch来判断一个字符串是否符合一个pattern。

void testRegexMatch()
{
    QString pattern(".*=.*");
    QRegExp rx(pattern);

    bool match = rx.exactMatch("a=3");
    qDebug() << match;                      // True

    match = rx.exactMatch("a/2");
    qDebug() << match;                      // False
}

用正则表达式提取数据

你可以利用利用正则表达式从一个字符串里提取特定的字段或数据。例如,你可以用以下代码从"a=100"里提取"a"和"100"。

void testRegexCapture()
{
    QString pattern("(.*)=(.*)");
    QRegExp rx(pattern);

    QString str("a=100");
    int pos = str.indexOf(rx);              // 0, position of the first match.
                                            // Returns -1 if str is not found.
                                            // You can also use rx.indexIn(str);
    qDebug() << pos;
    if ( pos >= 0 )
    {
        qDebug() << rx.matchedLength();     // 5, length of the last matched string
                                            // or -1 if there was no match
        qDebug() << rx.capturedTexts();     // QStringList("a=100", "a", "100"),
                                            //   0: text matching pattern
                                            //   1: text captured by the 1st ()
                                            //   2: text captured by the 2nd ()

        qDebug() << rx.cap(0);              // a=100, text matching pattern
        qDebug() << rx.cap(1);              // a, text captured by the nth ()
        qDebug() << rx.cap(2);              // 100,

        qDebug() << rx.pos(0);              // 0, position of the nth captured text
        qDebug() << rx.pos(1);              // 0
        qDebug() << rx.pos(2);              // 2
    }


用正则表达式修改文本

你可以把字符串中匹配的字符串替换成"一般字符串"

QString s = "a=100";
    s.replace(QRegExp("(.*)="), "b=");
    qDebug() << s;                          // b=100


或是把字符串中匹配的字符串替换"提取的字符串"

QString s = "a=100";
    s.replace(QRegExp("(.*)=(.*)"), "\\1\\2=\\2");  // \1 is rx.cap(1), \2 is rx.cap(2)
    qDebug() << s;                                  // a100=100


把正则表达式转换成C/C++ string的小工具

没有Python的"""或是C#的@。标准的正则表达式因为出现一些特殊字符,在C/C++代码里使用时,必须进行转换。例如:"(\S+)\s*=\s*(\S*)"必须转换成"(\\S+)\\s*=\\s*(\\S*)"

Qt的SDK里包含一个很帮的GUI工具,可以方便我们进行这类转换并测试你的表达式。在Linux下,它的路径是/usr/local/Trolltech/Qt-4.5.3/examples/tools/regexp/regexp

转:Qt的正则表达式和QRegExp

考虑一下我们经常遇到的问题,比如gemfield想从青岛之光读书(www.civilnet.cn/book)中找一个关键的电话号码,通常第一步就是将书中所有的电话号码查找出来放在手边。那么怎么拟定查询...

QT-正则表达式QRegExp

QT-正则表达式QRegExp sf2gis@163.com 2015年1月10日   1 目的:字符串模式匹配及操作。 2 原理:通过模式字符串,查找相应的字符串索引。与QString配合...
  • sf2gis2
  • sf2gis2
  • 2015年04月30日 11:32
  • 1779

Qt中的正则表达式类QRegExp

QRegExp是Qt的正则表达式类.Qt中有两个不同类的正则表达式.第一类为元字符.它表示一个或多个常量表达式.令一类为转义字符,它代表一个特殊字符.一.元字符.匹配任意单个字符.例如,1.3可能是1...

Qt之正则表达式QRegExp

http://blog.csdn.net/ljt350740378/article/details/50149963 1、 QT中的QRegExp类实现了正则表达式的模式匹配。 2、Qt中有两个不...

Qt QRegExp正则表达式学习及应用

Qt的SDK里包含一个很帮的GUI工具,可以方便我们进行这类转换并测试你的表达式。可以按照如下的方式打开:“开始”->“程序”->“Qt SDK by Nokia v2010.02.1 (open s...

Qt 正则表达式(QRegExp)

正则表达式是对字符串操作的一种逻辑公式,匹配一系列符合某个句法规则的字符串。Qt的正则表示类是QRegExp,在很多情况下都可以用到,比如字符串验证、字符串搜索、搜索并替换、字符串分割等。QRegEx...

QT中的QRegExp学习(正则表达式)

QT中的QRegExp学习(正则表达式) 下面是例子: [ABCD] 或 [A-D] 表示匹配A B C D中的其中一个 x{1,1} 匹配x一次,仅一次  x{1,5} 表示匹配x次数>=1 ...

qt中的正则表达式QRegExp使用以及匹配中括号[]方法

Qt的SDK里包含一个很帮的GUI工具,可以方便我们进行这类转换并测试你的表达式。可以按照如下的方式打开:“开始”->“程序”->“Qt SDK by Nokia v2010.02.1 (open ...

QRegExp一些注意事项(正则表达式和模式匹配)

某些字符代表的非本身意义(即有特殊意义):如:^、-、*等,要表示本身意义时,需要在前面加"\"。 某些字符代表其本身意义,但是加上"\"后有特殊意义,如:\n、\r、\t、\v、\a、\f等。 qt...
  • myth_HG
  • myth_HG
  • 2016年06月17日 16:35
  • 1862

QRegExp 正则表达式解析

引言     正则表达式(regular expression)就是用一个“字符串”来描述一个特征,然后去验证另一个“字符串”是否符合这个特征。比如 表达式“ab+” 描述的特征是“一个 'a' 和...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt之正则表达式 - QRegExp
举报原因:
原因补充:

(最多只允许输入30个字)