2010年2月17日水曜日

xpressive いい!

 いやー、boost::xpressive 便利ですねー。白状すると、正規表現は苦手科目でして、どうにも使い方がいまひとつわかんなったんですよねー。だから、正規表現で検索して、とある部分にマッチする部分だけを抜き出すには、どないしたらええねーーーーん。うゎわーーーーん。だったんですよ…。これ、内緒の話ね。
 わかってしまえば、何のことはない。() で囲んだ部分は、マッチした中から、更に配列形式で取り出せたんですね…。もう、感動もんです。

#include <boost/xpressive/xpressive.hpp>
#include <string>
#include <iostream>

int main() {
  std::string str = 
    "fuga 2005/01/32 21:22:54 hoge 2003/12/03 13:21:33 fuga=\"hoe--\" <hohoho>";

  boost::xpressive::sregex r = boost::xpressive::sregex::compile( 
    "hoge (\\d\\d\\d\\d)\\/(\\d\\d)\\/(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d)" 
  );
  boost::xpressive::smatch m;
  if( boost::xpressive::regex_search( str, m, r ) ) {
    std::cout << m[1] << "/" << m[2] << "/" << m[3] << " ";
    std::cout << m[4] << ":" << m[5] << ":" << m[6] << std::endl;
  }

  return 0;
}

追記:くーっ、隊長いつの間にこんな記事を… orz

0 件のコメント: