【Boost】boost::string_algo详解2——find相关函数
来自: 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());
【Boost】boost::string_algo详解2——find相关函数的更多相关文章
- [转] boost::function用法详解
http://blog.csdn.net/benny5609/article/details/2324474 要开始使用 Boost.Function, 就要包含头文件 "boost/fun ...
- boost::function用法详解
要开始使用 Boost.Function, 就要包含头文件 "boost/function.hpp", 或者某个带数字的版本,从 "boost/function/func ...
- boost::fucntion 用法详解
转载自:http://blog.csdn.net/benny5609/article/details/2324474 要开始使用 Boost.Function, 就要包含头文件 "boost ...
- boost库asio详解1——strand与io_service区别
namespace { // strand提供串行执行, 能够保证线程安全, 同时被post或dispatch的方法, 不会被并发的执行. // io_service不能保证线程安全 boost::a ...
- Boost::bind使用详解
1.Boost::bind 在STL中,我们经常需要使用bind1st,bind2st函数绑定器和fun_ptr,mem_fun等函数适配器,这些函数绑定器和函数适配器使用起来比较麻烦,需要根据是全局 ...
- Boost::split用法详解
工程中使用boost库:(设定vs2010环境)在Library files加上 D:\boost\boost_1_46_0\bin\vc10\lib在Include files加上 D:\boost ...
- 【Boost】boost库asio详解5——resolver与endpoint使用说明
tcp::resolver一般和tcp::resolver::query结合用,通过query这个词顾名思义就知道它是用来查询socket的相应信息,一般而言我们关心socket的东东有address ...
- boost::algorithm用法详解之字符串关系判断
http://blog.csdn.net/qingzai_/article/details/44417937 下面先列举几个常用的: #define i_end_with boost::iends_w ...
- 【Boost】boost库asio详解3——io_service作为work pool
无论如何使用,都能感觉到使用boost.asio实现服务器,不仅是一件非常轻松的事,而且代码很漂亮,逻辑也相当清晰,这点上很不同于ACE.使用io_service作为处理工作的work pool,可以 ...
随机推荐
- html5的audio实现高仿微信语音播放效果
效果图 前台大体呈现效果图如下: 点击就可以播放mp3格式的录音.点击另外一个录音,当前录音停止! 思路 关于播放动画,这个很简单,我们可以用css3的逐帧动画来实现.关于逐帧动画,我之前的文章也写过 ...
- jquery正则表达式验证(手机号、身份证号、中文名称)
这篇文章主要介绍了jquery正则表达式验证,实现手机号.身份证号.中文名称验证,感兴趣的小伙伴们可以参考一下 本文实例需要验证的内容:中文姓名.手机号.身份证和地址,验证方法分享给大家供大家参考,具 ...
- 048 SparkSQL自定义UDAF函数
一:程序 1.需求 实现一个求平均值的UDAF. 这里保留Double格式化,在完成求平均值后与系统的AVG进行对比,观察正确性. 2.SparkSQLUDFDemo程序 package com.sc ...
- css3 的新属性
1,动画,animate------>//动画-名称-动画的时间间隔-以什么方式播放-循环 .right{ animate:dropdown 4px 5px #000; // x的偏移值 y的偏 ...
- Linux学习之日志管理(二十一)
Linux学习之日志管理 目录 日志管理 日志服务 rsyslogd的新特点 启动日志服务 常见日志的作用 日志文件的一般格式 rsyslogd日志服务 /etc/rsyslog.conf配置文件 服 ...
- P2279 [HNOI2003]消防局的设立
P2279 [HNOI2003]消防局的设立考场上想出了贪心策略,但是处理细节时有点问题,gg了.从(当前深度最大的节点)叶子节点往上跳k个,在这里设消防局,并从消防局遍历k个距离,标记上. #inc ...
- MyEclipse、Eclipse使用配置及部分问题
简单总结一下myeclipse首次使用的配置,eclipse类似.总结的不是很全面,如有新的看法,欢迎下方留言. 最优设置 1.myeclipse激活 myeclipse.eclipse程序及激活工具 ...
- PHP反序列化与Session
0x00前言: php存储session有三种模式,php_serialize, php, binary 这里着重讨论php_serialize和php的不合理使用导致的安全问题 关于session的 ...
- notepad++ 注释
在用notepad++进行代码编辑的过程中,总感觉还是有keil那样可以进行多行注释的快捷方式方便,其实notepad++也可以进行单行.多行.区块注释和取消注释的....... 快捷键如下: 单行. ...
- DOCKER 是什么?!
Docker,改变程序世界的箱子 给产品经理讲技术 • 2016-01-14 • 深氪 Docker的道理和集装箱一样. 本文来自微信公众号“给产品经理讲技术”(pm_teacher),欢迎大家关注. ...