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