QT 正则表达式

      编程其实大部分都是在与字符串打交道, 正则表达式能够精确的提炼并修改字符串内容,非常强大,比较起 int index=str.indexOf("a=") str.mid(index,5) 这样局部搜索来的方便多了. 但是正则表达式不太好写,要多积累.

 

一. 修改文本

// 括号分组,提炼相关组内容
QRegExp exp("(.*)=(.*)");
QString s="a=100";
s.replace(exp,"\\1*\\2=\\2");
qDebug()<<s;  // a*100=100

 

二. 匹配QT路径

// \比较特殊,正则表达式为转义符,此处需要加4个\才能匹配
QString str="d:\\Qt\\4.4.3\\lib\\QtSvgd4.lib";
QRegExp rga("[Qq]t\\\\(.*)\\\\lib");
qDebug("pos: %d",str.indexOf(rga));  // pos=3
// 提取组内容
QString version=str.cap(1);  // 4.4.3

 

三. 循环查找所有匹配内容 

QRegExp exp("E'([0-9a-f]{1,})'"); // 匹配16进制内容
QString str="values(1,'hello',E'003f','ming',E'893f')";
int pos=0;

// 循环查找
QStringList bList;
while((pos=exp.indexIn(str,pos))!=-1)
{
	bList.append(exp.cap(0)); // E'003f',0匹配整个内容

	QString value=exp.cap(1);
	qDebug("=== %s",qPrintable(value)); // 003f,匹配子内容
	pos+=exp.matchedLength();
}

 

四. 匹配中文

QString str="hello 苦逼中国人 chinese";
QRegExp rg("[\u4e00-\u9fa5]"); // 中文匹配正则表达式,在VC6下无法正常工作,VS版本测试正常
str.contains(rg); // true

 

你可能感兴趣的:(QT正则表达式)