boost 正则表达式 regex

boost 正则表达式 regex

 

环境安装

如果在引用boost regex出现连接错误,但是引用其他的库却没有这个错误,这是因为对于boost来说,是免编译的,但是,正则这个库 是需要单独编译和使用的。简单的办法就是 直接将boost库全部编译,然后 找到正则的lib,编译时候引用进去。

代码example

#include <boost/regex.hpp>
#include <iostream>
#include <string>
#include "TestRe.h"

using namespace::boost;
using namespace::std;

void TestRe::test() {

    regex re("(https?://www.ttufo.com/.+/.+/.+)(_\\d+)(.html?)");



    //string replace("http://www.ttufo.com/($1)/($2)/($3).htm($5)");
    //regex re("http://www.ttufo.com/(.+)/(.+)/(.+)(_.+).htm(l?)");

    string target("http://www.ttufo.com/ufo/201705/154053_3.html");

    cmatch what;

    if (regex_match(target.c_str(), what, re)) {

        cout << "match " << what.size() << endl;

        for (int i = 0; i < what.size(); i++) {

           cout << "what[" << i << "]: " << what[i] << ", first: " << what[i].first << ", second: " << what[i].second << endl;
        }
    } else {
        cout << "not match " << endl;
    }

}

void TestRe::test_replace() {

    cout << "test replac ----------------" << endl;
    string s1 = "(<)|(>)|(&)";
    // string s2 = "(?1b)(?2e)(?3...)";
    string s2 = "(?1$1)(?2$2)(?3...)";

    string target("cout << a&b << endl;");
    boost::regex reg( s1 );
    string s = boost::regex_replace( target,
                                     reg,
                                     s2,
                                     boost::match_default | boost::format_all);
    cout << s << endl;


    cmatch what;

    target = "cout << a&b << endl;";
    if (regex_search(target.c_str(), what, reg)) {

        cout << "match " << what.size() << endl;

        for (int i = 0; i < what.size(); i++) {

            cout << "what[" << i << "]: " << what[i] << ", first: " << what[i].first << ", second: " << what[i].second << endl;
        }
    } else {
        cout << "not match " << endl;
    }

    cout << "test replac ----------------" << endl;
}

void TestRe::test_replace_1() {
    regex reg("(https?://www.ttufo.com/.+/.+/.+)(_\\d+)(.html?)");

    string target("https://www.ttufo.com/ufo/201705/154053_3.html");

    string replace("http://www.ttufo.com/($1)/($2)/($3).htm($5)");
    replace = "($1)($3)";
    string s = boost::regex_replace( target,
                                     reg,
                                     replace,
                                     boost::match_default | boost::format_all);

    cout << "test replace 1" << endl;
    cout << s << endl;
    cout << "test replace1 end" << endl;
}
 
posted @ 2019-04-20 07:41  中国人醒来了  阅读(2813)  评论(0编辑  收藏  举报