boost 正则表达式 regex

时间:2022-05-31 23:27:43

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;
}