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
作者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