C++11 理解 (二十二) 之 正则表达式
来源:互联网 发布:淘宝店铺招牌950 120 编辑:程序博客网 时间:2024/06/10 08:47
过去许多或多或少标准化的程序库被创建用来处理正则表达式。有鉴于这些算法的使用非常普遍,因此标准程序库将会包含他们,并使用各种面向对象语言的潜力。
这个新的程序库,被定义于<regex>
头文件,由几个新的类型所组成:
- 正则表达式(样式)以样板类
basic_regex
的实体表示 - 样式匹配的情况以样板类
match_results
的实体表示
函数 regex_search
是用来搜索样式; 若要搜索并取代,则要使用函数 regex_replace
,该函数会回传一个新的字符串。算法regex_search
和 regex_replace
接受一个正则表达式(样式)和一个字符串,并将该样式匹配的情况存储在 struct match_results
。
底下描述了 match_results
的使用情况:
const char *reg_esp = "[ ,.\\t\\n;:]" ; // 分隔字元列表 std::regex rgx(reg_esp) ; // 'regex' 是樣板類 'basic_regex' 以型別為 'char' // 的參數具現化的實體std::cmatch match ; // 'cmatch' 是樣板類 match_results' 以型別為 'const char *' // '的參數具現化的實體const char *target = "Polytechnic University of Turin " ; // 辨別所有被分隔字元所分隔的字if( regex_search( target, match, rgx ) ){ // 若此種字存在 const size_t n = match.size(); for( size_t a = 0 ; a < n ; a++ ) { string str( match[a].first, match[a].second ) ; cout << str << "\n" ; }}
注意双反斜线的使用,因为 C++ 将反斜线作为跳脱字符使用。但 C++11 的raw string可以用来避免此一问题。库 <regex> 不需要改动到现有的头文件,同时也不需要对现有的语言作扩展。
- C++11 理解 (二十二) 之 正则表达式
- Object-c正则表达式之二
- ELisp编程十二:正则表达式二
- 正则表达式之二
- 正则表达式之二
- DOM编程之十二--正则表达式四
- 黑马程序员-----java基础二十二(java之正则表达式)
- 正则表达式之C#
- 正则表达式(十二)
- 正则表达式学习指南(二十二)----XML Character Classes
- 深入浅出之正则表达式(二)
- 深入浅出之正则表达式(二)
- 正则表达式教程之二
- 正则表达式笔记之二
- 深入浅出之正则表达式(二)
- python 正则表达式之二
- Python正则表达式之二
- c函数之【正则表达式】
- $(document).ready() 与window.onload的区别
- 如何在Qt和QML之间建立信号槽链接
- 几个常用的Linux操作系统监控脚本
- LPTSTR CString 相互转换 CString char * 相互转换
- 从内存输入与格式化的内存输入
- C++11 理解 (二十二) 之 正则表达式
- Oracle去重
- [转载]HTML5 Storage Wars - localStorage vs. IndexedDB vs. Web SQL
- 小谈入侵踩点技术
- 存储和恢复数据
- DATE类型在jsp和java文件的使用
- php var_export与var_dump 输出的不同
- vcard 修改头像
- 无准考证号的四六级查询