来自: https://blog.csdn.net/huang_xw/article/details/8276123
函数声明:
- 
template<typename Range1T, typename Range2T>
- 
iterator_range find_first(Range1T & Input, const Range2T & Search);
- 
template<typename Range1T, typename Range2T>
- 
iterator_range find_last(Range1T & Input, const Range2T & Search);
- 
template<typename Range1T, typename Range2T>
- 
iterator_range find_nth(Range1T &Input, const Range2T & Search, int Nth);
- 
template<typename RangeT>
- 
find_head(RangeT &Input, int N);
- 
template<typename RangeT>
- 
find_tail(RangeT & Input, int N);
例子:
- 
// find_first:【1】查找字符串在输入中第一次出现的位置。
- 
// find_last: 【2】查找字符串在输入中最后一次出现的位置。
- 
// find_nth: 【3】查找字符串在输入中的第n次(从0开始计数)出现的位置。
- 
// find_head: 【4】取一个字符串开头N个字符的字串,相当于substr(0,n);
- 
// find_tail: 【5】取一个字符串末尾N个字符的字串。
- 
void test_string_find_string()
- 
{
- 
std::string str1("a1234_first_nth_first_nth_");
- 
boost::iterator_range<std::string::iterator> ir;
- 
- 
// find_first与ifind_first(不区分大小写,其它同find_first)
- 
ir = boost::find_first(str1, "first");
- 
// 1. 通过iterator_range构建字符串
- 
assert(std::string(ir.begin(), ir.end()) == "first");
- 
// 2. 查看搜索到的字符串所在位置
- 
assert(ir.begin() - str1.begin() == 6 && ir.end() - str1.begin() == 6 + 5);
- 
// 3. 利用iterator_range处理搜索到的字符串
- 
boost::to_upper(ir);
- 
assert(str1 == "a1234_FIRST_nth_first_nth_");
- 
boost::to_lower(ir);
- 
assert(str1 == "a1234_first_nth_first_nth_");
- 
- 
// find没有找到的情况
- 
ir = boost::find_first(str1, "no");
- 
assert(ir.empty()); // 不存在
- 
assert(std::string(ir.begin(), ir.end()).empty()); // 不存在,仍可构建一个string
- 
std::ostringstream osstr;
- 
osstr << boost::find_first(str1, "_first_");
- 
assert(osstr.str() == "_first_");
- 
}
find_token的函数声明
- 
template<typename RangeT, typename PredicateT>
- 
iterator_range< typename range_iterator< RangeT >::type >
- 
find_token(RangeT & Input, PredicateT Pred,
- 
token_compress_mode_type eCompress = token_compress_off);
find_token的例子
- 
void test_string_find_token()
- 
{
- 
using namespace boost;
- 
- 
std::string str1("ab1234_first_nth_first_nth_");
- 
iterator_range<std::string::iterator> ir;
- 
- 
ir = find_token(str1, is_any_of("irfst"));
- 
assert(std::string(ir.begin(), ir.end()) == "f");
- 
- 
ir = find_token(str1, is_any_of("xfirts"), token_compress_off);
- 
assert(std::string(ir.begin(), ir.end()) == "f");
- 
- 
ir = find_token(str1, is_any_of("irfst"), token_compress_on);
- 
assert(std::string(ir.begin(), ir.end()) == "first");
- 
- 
ir = find_token(str1, is_any_of("fitr "), token_compress_on);
- 
assert(std::string(ir.begin(), ir.end()) == "fir");
- 
- 
ir = find_token(str1, is_lower(), token_compress_on);
- 
assert(std::string(ir.begin(), ir.end()) == "ab");
- 
}
find_regex的例子
- 
// 注意加上头文件
- 
// #include <boost/algorithm/string/regex.hpp>
- 
// find_regex, find_all_regex
- 
void test_string_find_regex()
- 
{
- 
using namespace boost;
- 
- 
std::string str1("ab1234_first_nth_first_nth_");
- 
iterator_range<std::string::iterator> ir;
- 
regex rx("b[0-9]+_");
- 
- 
ir = find_regex(str1, rx);
- 
assert(std::string(ir.begin(), ir.end()) == "b1234_");
- 
- 
std::string str2("b1_b22_b333_b4444");
- 
std::vector<std::string> tokens;
- 
find_all_regex(tokens, str2, rx);
- 
assert(tokens.size() == 3);
- 
assert(tokens[0] == "b1_");
- 
assert(tokens[1] == "b22_");
- 
assert(tokens[2] == "b333_");
- 
- 
// 网络上找到的另一个例子
- 
std::string value = "123a1cxxxxa56c";
- 
regex pattern("a[0-9]+c");
- 
iterator_range<std::string::iterator> find_result;
- 
find_result = algorithm::find_regex(value, pattern);
- 
assert(!find_result.empty());
- 
- 
std::vector<std::string> results;
- 
find_all_regex(results, value, pattern);
- 
assert("a1c" == results[0]);
- 
assert("a56c" == results[1]);
- 
assert(!results.empty());
- 
- 
value = "10.10.10.10 1.1.1.1";
- 
boost::regex ip_pattern("(\\d{1, 3}.){3}\\d{1, 3}");
- 
find_all_regex(results, value, ip_pattern);
- 
assert("10.10.10.10" == results[0]);
- 
assert("1.1.1.1" == results[1]);
- 
assert(!results.empty());
- 
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号