C++学习笔记——正则表达式
来源:互联网 发布:第三方微信软件 编辑:程序博客网 时间:2024/05/22 05:13
正则表达式是一种描述字符序列的方法,是一种及其强大的计算工具。用于处理大字符串十分方便。在C++新标准中引入了正则表达式库(RE库,Ecmascript)。RE库定义在头文件 regex 中。
Ecmascript语法
C++正则表达式库组件
regex:表示一个正则表达式的类
regex_match:将一个字符序列与一个正则表达式匹配
regex_search:寻找第一个与正则表达式匹配的子序列
regex_replace:使用给定格式替换一个正则表达式
sregex_iterator:迭代器适配器,调用 regex_search 来遍历一个 string 中所有匹配的子串
smatch:容器类,保存在 string 中搜索的结果
ssub_match: string 中匹配的子表达式的结果
示例
获得单个匹配(第一个匹配)
#include <regex>string pattern = "[[:alpaha:]]+";regex r(pattern);smatch result;string test = "my name is Dave";if(regex_search(test,result,r)){ cout<<result.str()<<endl;}
获得所有匹配
string pattern = "[[:alpaha:]]+";regex r(pattern,reges::icase);string test = "my name is Dave";for(sregex_iterator it(test.begin(),test.end(),r), end_it; it != end_it; ++it){ cout<<it->str()<<endl; //解引用 it 会获得 smatch 对象}
获取匹配上下文
- prefix:表示当前匹配之前的序列
- suffix:表示当前匹配之后的序列
string pattern = "[[:alpaha:]]+";regex r(pattern,reges::icase);string test = "my name is Dave";for(sregex_iterator it(test.begin(),test.end(),r), end_it; it != end_it; ++it){ auto pos = it->prefix().length(); //前缀大小 pos = pos > 30 ? pos-30 : 0; //最多30个字符 cout<<it->prefix().str().substr(pos) //前缀的最后一部分 <<endl<< it->str() <<endl //匹配字符 <<it->suffix().str().substr(0,30) //后缀第一部分 <<endl;}
子匹配操作
string pattern = "([[:alpaha:]]+).*([[:digit:]]+)";regex r(pattern,reges::icase);string test = "my name is Dave";for(sregex_iterator it(test.begin(),test.end(),r), end_it; it != end_it; ++it){ cout<<*it[0].str()<<endl; // 0 代表整个匹配 cout<<*it[1].str()<<endl; // 1 代表第一个子表达式 cout<<*it[2].str()<<endl; // 2 代表第二个子表达式}
匹配替换
string fmt = "$2.$5.$7"; string phone = "(\\()?(\\d{3})(\\))?([-. ])?(\\d{3})([-. ?)(\\d{4})"; regex r(phone); string number = "(908) 555-1800"; cout<< regex_replace(number,r,fmt) <<endl;
继续努力!!!!!!
阅读全文
0 0
- 正则表达式学习笔记之一——正则表达式引擎
- linux学习笔记——正则表达式
- 学习笔记——精通正则表达式
- Java学习笔记——正则表达式
- 正则表达式学习笔记——
- 正则表达式——学习笔记1
- JS正则表达式——学习笔记
- Javascript学习笔记——正则表达式
- 正则表达式——学习笔记
- Java学习笔记——正则表达式
- Java学习笔记——正则表达式
- splunk学习笔记——正则表达式
- JAVA学习笔记——正则表达式
- C++学习笔记——正则表达式
- 黑马程序员—正则表达式学习笔记
- perl学习笔记—正则表达式
- 【C语言】正则表达式学习笔记
- C#Regex正则表达式学习笔记
- 最长公共子序列(DP)
- HashMap之entrySet( )底层实现原理分析
- 执行mavenclean,install,生成项目jar文件
- java鬼混笔记:Hibernate:3、一对一关系之外键单向和双向关联
- 需要深入学习的开源项目
- C++学习笔记——正则表达式
- 使用BootStrap Inputfile 遇到的问题
- poj
- hdu 6143(2017多校联赛08-11)
- 吾爱破解160个crackme之005
- HTML 框架[frame&iframe]
- Python列表
- Access denied for user 'Administrator'@'localhost' (using password: YES)
- 时间复杂度学习笔记