读书人

paip.c++ 正则表达式的应用和普通正

发布时间: 2013-09-26 10:32:35 作者: rapoo

paip.c++ 正则表达式的应用跟普通正则表达式的区别以及特别注意点总
paip.c++ 正则表达式的应用跟普通正则表达式的区别以及特别注意点总结


作者Attilax , EMAIL:1466519819@qq.com
来源:attilax的专栏
地址:http://blog.csdn.net/attilax


例子:
QString html= " <a href=\"http://blog.csdn.net/attilax/article/category/1632463\">.net</a><span>(1)</span> </li> <li> <a href=\"http://blog.csdn.net/attilax/article/category/1632465\">php</a><span>(4)</span> end";



1.普通正则表达式
--------------------
<a href=.*?> 就可以找到...但是c++里面不行.. 好像不支持这个最小模式语法.
.*?是最小模式,去掉问号.*则是贪婪模型..

2.c++中的正则表达式
-------------------
c++中只能使用 <a href=.*> ,但是这个是贪婪模型..所以腰 rx.setMinimal((true));设置为正常的模型..
此外,抓取到的每个匹配都是list,一般 list[1]是 .* 代表的内容..list[0]是对应整个表达式匹配的内容<a href=*****>..


源码如下:
------------


QRegExp rx;
// rx.setPatternSyntax(QRegExp::Wildcard);
// rx.setCaseSensitivity(Qt::CaseSensitive); //大小写敏感
QString templet="<a href=\"http://blog.csdn.net/attilax/article/category/(.*)</a><span>";
rx.setPattern(templet); //匹配所有大小写字母和数字组成的字符串
rx.setMinimal((true));
// QString s = html;


int pos = 0;




//ati c922 open file wait 2 write
QString fileName ="c:\csdncat.txt";


QFile f( fileName );


f.open(QIODevice::WriteOnly );


QTextStream t(&f);


//end




while ((pos = rx.indexIn(html, pos)) != -1) {


QStringList list = rx.capturedTexts();
// QStringList sl = rx.cap(1).split(QChar(' '));


// qDebug() << sl.at(0);
QString idAndName=list.at(1);
QString idAndNameOk=idAndName.replace("\">",",");
qDebug() << idAndNameOk;
t << idAndNameOk +"\r\n";




pos += rx.matchedLength();


}


f.close();






参考:
Qt之正则表达式 - QRegExp - 与时俱进 - 博客园.htm
正则基础之——贪婪与非贪婪模式 - 雁过无痕 - 博客频道 - CSDN.NET.htm












读书人网 >网络基础

热点推荐