Boost正则表达式
在C++编程中,有一点让人挺遗憾的就是C++尚不支持正则表达式,这让很多用户为了编写支持正则表达式程序而不得不放弃C++。然而,Boost.Regex库填补了C++在这方面的空白,它使C++很好的支持各种引擎的正则表达式。
详细文章链接:http://club.topsage.com/thread-2276543-1-1.html
boost regex笔记:http://blog.csdn.net/shiwei0124/article/details/4553665
在C++编程中,有一点让人挺遗憾的就是C++尚不支持正则表达式,这让很多用户为了编写支持正则表达式程序而不得不放弃C++。然而,Boost.Regex库填补了C++在这方面的空白,它使C++很好的支持各种引擎的正则表达式。
结合我的学习,逐步分析Boost.Regex库。
……
Boost.Regex默认使用Perl正则表达式,关于Perl正则表达式的使用,这里就不多说明了,可以参考相关资料。
Boost的正则表达式封装在boost::basic_regex对象中,与std::basic_string一样,boost::basic_regex表示的是一族类,也与std::basic_string一样typedef了几个特例:
typedef basic_regex<char> regex;
typedef basic_regex<wchar>wregex;
Boost.Regex的几个中重要的成员函数如下:
1. explicit basic_regex(const CharT* p,flag_type regex_constants::normal);
该构造函数接受一个包含正则表达式的字符序列,以及一个表示正则表达式所选的参数信息——例如是否大小写或使用什么引擎的正则表达式。这里注意,如果传递的字符序列是无效的正则表达式,则会抛出异常regex_error。
2. bool emply()const;
该成员函数检测basic_regex示例是否包含有效的正则表达式。
3. unsigned mark_count() const;
该成员函数返回该basic_regex示例中的正则表达式包含的有标记的子表达式的个数。
4. flag_type flags()const;
该函数返回一个位掩码,其中包含basic_regex所设置的选项标志。具体标志选项有:icase—忽略字符大小写和JavaScript—regex使用JavaScript语法
另外,Boost.Regex定义了几个自由函数,实现正则表达式的匹配查询及修改:
1. 判断正则表达式时候匹配整个字符串
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
4
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
5
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
7
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
8
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
9
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
10
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
11
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
12
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2. 查找字符串中与正则表达式匹配的子序列
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
3. 查找字符串中所有正则表达式的匹配,并根据参数fmt格式化所匹配的串
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
使用说明
1. 创建regex对象:
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2. regex_match
该函数用来对一个字符串的完全匹配,在很多校验信息中可以广泛使用,具体使用示例见附后的测试代码
3. regex_rearch
说到这个函数,必须要说明下boost.match_result。 regex_rearch在执行查找时,通过一个match_result类型的对象来报告匹配的自表达式。
match_result主要封装了一个std::vector<sub_match<<…>> >类型的对象,而sub_match类继承自std::pair,主要记录匹配的结果信息。关于match_result和sub_match的详细了解可以阅读boost设计源码:
使用示例查看附后的测试源码。
4. regex_replace
该函数根据指定的fmt格式化通过正则表达式匹配的子串。需要注意的是,该函数不会修改原字符串,只是将格式化后的结果返回。具体使用示例见附后测试源码。
5. regex_iterator
通过多次调用regex_rearch我们可以处理所有满足匹配的字串。但是,Regex库还给我们提供了一个更优雅的方法——即通过regex_iterator。通过字符串和正则表达式构造regex_iterator的时候会构建一个match_result的对象用于保存匹配结果信息,再通过重载++运算符达到遍历所有匹配信息的目的。关于regex_iterator的详细了解可以参考Regex的设计源码:
使用示例查看附后的测试源码。
6. regex_token_iterator
与regex_iterator相似,Regex还提供了一个列举与正则表达式不匹配的子表达式,就是regex_token_iterator。与stl的设计类似,是通过迭代器适配器实现的。这个特性让我们很容易的分割字符串。关于regex_token_iterator的详细了解请查看Regex的设计源码:
7.测试源码
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
2
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
3
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
4
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
5
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
6
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
7
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
8
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
9
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
10
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
11
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
12
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
13
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
14
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
15
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
17
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
19
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
20
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
21
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
22
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
23
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
24
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
25
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
26
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
27
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
29
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
30
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
31
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
32
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
33
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
34
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
35
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
36
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
37
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
38
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
39
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
40
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
41
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
42
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
43
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
44
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
45
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
46
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
47
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
48
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
49
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
50
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
51
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
52
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
53
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
54
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
55
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
56
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
57
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
58
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
59
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
60
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
61
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
62
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
63
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
64
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
65
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
66
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
67
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
68
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
69
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
70
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
71
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
72
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
73
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
74
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
75
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
76
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
77
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
78
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
79
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
80
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
81
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
82
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
83
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
84
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
85
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
86
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
87
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
88
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
89
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
90
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
91
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
92
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
93
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
94
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
95
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
96
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
97
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
学习小结:
关于Boost.Regex库的初步学习暂时告以段落。这是个非常有用的库,打破了用户只有通过POSIX C的API实现正则表达式的局限。然而,这是一个伟大的库博大精深的库,以上的了解只不过的凤毛麟角,其内部还有很多的隐藏秘密需要花大量的时间去挖掘,探索。
所以,如果不是纯粹的要长期使用C++boost的话,就不要在Boost里面探索了!!!
Boost正则表达式相关推荐
- Boost:正则表达式的实例
Boost:正则表达式的实例 实现功能 C++实现代码 实现功能 与宏BOOST_TEST_EQ相关的正则表达式的实例 C++实现代码 #include <boost/regex.hpp> ...
- Boost正则表达式库regex常用search和match示例 - 编程语言 - 开发者第2241727个问答
Boost正则表达式库regex常用search和match示例 - 编程语言 - 开发者第2241727个问答 Boost正则表达式库regex常用search和match示例 发表回复 Boost ...
- Boost正则表达式的编译与使用方法集
下载boost 在boost官网上下载任何版本都可以www.boost.org . 将boost压缩包解压到D盘目录下 (我下载的是boost_1_54_0.zip),目录为D:\boost_1_54 ...
- C++新特性之五:标准库中的正则表达式扩充
总第34篇 本文主要对C++11/14标准库中的正则表达式的扩充进行详细总结说明,以方便大家在学习工作过程中参考. 1.正则表达式 正则表达式是描述一种字符串匹配的模式.一般使用正则表达式主要实现下面 ...
- C语言读取大文件的问题 内存映射
2019独角兽企业重金招聘Python工程师标准>>> [Ref] Windows对文件的读写提供了很丰富的操作手段,如: 1. FILE *fp, fstearm...; (C/C ...
- VC操作INI文件 ,INI文件操作总结,如何操作INI文件,INI文件使用方法小结
INI文件简介 在我们写程序时,总有一些配置信息需要保存下来,以便在下一次启动程序完成初始化,这实际上是一种类持久化.将一些信息写入INI文件(initialization file)中,可完成简单的 ...
- x-studio(Lua调试器,粒子编辑器,UI编辑器,代码编辑器,csb恢复工具)
最新版本:x-studio 10.0.9000.29(2020年4月14日更新) 官网: https://x-studio.net 官方教程: https://docs.x-studio.net x- ...
- C++,ini文件操作(包含类)
什么是ini文件? initialization File,即为初始化文件,是windows的系统配置文件所采用的存储格式,统管windows的各项配置.或者作为项目中的配置文件,为整个项目所共用. ...
- MFC操作ini文件方法
转载:https://blog.csdn.net/rayborn1105/article/details/8192142 在我们的程序设计中经常需要对一些参数进行配置,配置好后还要在下一次启动仍然有效 ...
最新文章
- 基础设计模式:单例模式+工厂模式+注册树模式
- Windows 2003系统也玩图片收藏屏保
- pycharm 添加数据库驱动
- 写脚本时遇到的一些问题+自己的一些简单总结[小白版]
- WebView三个方法区别(解决乱码问题)
- 苹果cms10的php.ini目录列表,[苹果cmsV10]常见问题整理官方版
- mysql从库延时好高_部署MySQL延迟从库的几个好处
- 四、Linux用户管理
- SVM --从“原理”到实现
- 数学建模——BP神经网络模型Python代码
- 编程珠玑第一章习题解答
- Java Web学习(1):Web应用程序与Web服务器
- 03 三维地图添加切片图层
- 如何计算前缀,网络,子网和主机号?
- 条码生成器如何生成GS1-128条码
- 高德地图路径轨迹起点标点不变_竞品分析之高德地图与百度地图
- 《游戏脚本的设计与开发》-(RPG部分)3.6 队员列表和人物属性
- Java经典面试:源码解读及如何保证线程安全
- 国内CRM竞品分析【纷享销客 VS 销售易 VS 用友】
- arduino 计时器和中断
热门文章
- Java使用JDBC连接随意类型数据库(mysql oracle。。)
- 华为nova好不好 先看图
- 解决【Unable to find the requested .Net Framework Data Provider. It may not be installed.】错误...
- 使用组策略中的首选项更改域中计算机注册表
- entity framework学习笔记
- WPF内存泄露:CollectionViewSource.GetDefaultView导致Cache对象
- VC++新建选择卡的解释
- 使用taro命令(taro convert)转h5碰到的一些问题
- Jeecg-Boot前后端分离,针对敏感数据,加密传递方案
- Luogu3732 [HAOI2017] 供给侧改革 【后缀数组】【线段树】【乱搞】