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
   











原文地址:https://www.cnblogs.com/attilax/p/15199539.html