Boost学习之正则表达式--regex【转】【2】

boost::regex类为C++提供了完整的正则表达式支持,并且已被接收为C++0x标准库。

4.使用regex_iterator查找

    对应于C字符串和C++字符串以及宽字符,

regex_iterator

同样也有四个特化:


    typedef regex_iterator<const char*> cregex_iterator;     typedef regex_iterator<std::string::const_iterator> sregex_iterator;     typedef regex_iterator<const wchar_t*> wcregex_iterator;     typedef regex_iterator<std::wstring::const_iterator> wsregex_iterator;

    这个迭代器的

value_type

定义是一个

match_results


  1. //使用迭代器找出所有数字
  2.     boost::regex reg( "//d+" );    //查找字符串里的数字
  3.     boost::cregex_iterator itrBegin(szStr, szStr+strlen(szStr), reg);
  4.     boost::cregex_iterator itrEnd;
  5.     for(boost::cregex_iterator itr=itrBegin; itr!=itrEnd; ++itr)
  6.     {
  7.             //       指向子串对应首位置        指向子串对应尾位置          子串内容
  8.             cout << (*itr)[0].first-szStr << ' ' << (*itr)[0].second-szStr << ' ' << *itr << endl;
  9.     }
  10. }

    Boost.Regex也提供了

make_regex_iterator

函数简化

regex_iterator

的构造,如上面的

itrBegin

可以写成:


itrBegin = make_regex_iterator(szStr,reg);

 


5.使用regex_token_iterator拆分字符串

    它同样也有四个特化,形式和上面类似,就不再写一遍骗篇幅了。


    这个迭代器的

value_type

定义是一个

sub_match


  1. //使用迭代器拆分字符串
  2.     boost::regex reg("/");  //按/符拆分字符串
  3.     boost::cregex_token_iterator itrBegin(szStr, szStr+strlen(szStr), reg,-1);
  4.     boost::cregex_token_iterator itrEnd;
  5.     for(boost::cregex_token_iterator itr=itrBegin; itr!=itrEnd; ++itr)
  6.     {
  7.         cout << *itr << endl;
  8.     }
  9. }

    Boost.Regex也提供了

make_regex_token_iterator

函数简化

regex_token_iterator

的构造,最后的那个参数

-1

表示以

reg

为分隔标志拆分字符串,如果不是-1则表示取第几个子串,并且可以使用数组来表示同时要取几个子串,例如:


  1. //使用迭代器拆分字符串2
  2.     boost::regex reg("(.)/(.)");  //取/的前一字符和后一字符(这个字符串形象貌似有点邪恶-_-)
  3.     int subs[] = {1,2};        // 第一子串和第二子串
  4.     boost::cregex_token_iterator itrBegin = make_regex_token_iterator(szStr,reg,subs); //使用-1参数时拆分,使用其它数字时表示取第几个子串,可使用数组取多个串
  5.     boost::cregex_token_iterator itrEnd;
  6.     for(boost::cregex_token_iterator itr=itrBegin; itr!=itrEnd; ++itr)
  7.     {
  8.         cout << *itr << endl;
  9.     }
  10. }

   

参考 正则表达式教程
联机文档 联机文档里几个不错的例子: regex_search示例

,演示找出C++代码中所有的类定义


regex_replace示例

,演示以C/C++代码作为输入,输出代码高亮的HTML代码


regex_iterator示例

,regex_search示例的regex_iterator实现


regex_token_iterator示例

,第二个例子演示了从一个HTML文件里提取出所的有链接地址

你可能感兴趣的:(html,正则表达式,search,iterator,regex,token)