天天看点

boost.xpressive,Formatter的用法

//made by davidsu33

//2014-6-17

#include <boost/config/warning_disable.hpp>

#include <QtCore/QCoreApplication>

#include <boost/xpressive/xpressive_dynamic.hpp>

#include <boost/xpressive/xpressive_static.hpp>

#include <boost/typeof/typeof.hpp>

struct Formater

{

std::string  const& operator()(const boost::xpressive::smatch  & what) const

{

std::cout<<what.size()<<std::endl;

//return what[0].str();

static const std::string ss = "Kkkkkk";

return ss;

}

};

void use_dynamic_xpressive()

{

std::string srx("^\\w{2}.?(x|y)z{3}$");

boost::xpressive::sregex rx1 = 

boost::xpressive::sregex::compile(srx);

std::string s = "a1.yzzz";

std::string s2 = "axxx";

std::string s3 = "a1.YYY";

boost::xpressive::smatch macher1;

bool b1 = boost::xpressive::regex_match(s.begin(), s.end(), macher1, rx1);

int mSize = macher1.size();

std::string str1 = macher1.str(0);

std::string str2 = macher1.str(1);

int pos1 = macher1.position(0);

int pos2 = macher1.position(1);

for (BOOST_AUTO(it , macher1.begin()); it != macher1.end(); ++it)

{

std::cout<<*it<<std::endl;

}

bool b2 = boost::xpressive::regex_match(s2.begin(), s2.end(), rx1);

bool b3 = boost::xpressive::regex_match(s3.begin(), s3.end(), rx1);

bool b4 = boost::xpressive::regex_match(s3.begin(), s3.end(), rx1);

boost::xpressive::sregex rx2 = 

boost::xpressive::sregex::compile(srx, boost::xpressive::icase);

bool b5 = boost::xpressive::regex_match(s3.begin(), s3.end(), rx2);

boost::xpressive::sregex rx3 =

boost::xpressive::sregex::compile(std::string("\\d{2}\\w{1}"));

std::string ss1 = "33z44x88y9900";

//std::string ssr1 = 

std::string ssr1;

boost::xpressive::regex_replace(std::back_inserter(ssr1),ss1.begin(), ss1.end(), rx3, std::string("xxx"));

ssr1.clear();

boost::xpressive::regex_replace(std::back_inserter(ssr1), ss1.begin(), ss1.end(), rx3, Formater());

int xx = 0;

}

void use_static_xpressive()

{

//用得很少暂时不学了。

}

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv);

use_dynamic_xpressive();

return a.exec();

}