C++正则表达式编程.doc_第1页
C++正则表达式编程.doc_第2页
C++正则表达式编程.doc_第3页
C++正则表达式编程.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Boost 正则表达式编程定义变量:typedef basic_regex regex;typedef basic_regex wregex;1. 匹配检测函数:template bool regex_match( const charT* str, /待匹配字符串 match_results& m,/返回匹配结果 const basic_regex& e,/正则表达式串 match_flag_type flags = match_default);/匹配标志,否则采用默认匹配标志 注明:只有当字符串完全匹配才返回true2. 字符串搜索函数:查找子序列,该子序列匹配正则表达式e。template bool regex_search( const charT* str, match_results& m, const basic_regex& e, match_flag_type flags = match_default);3. 字符串替换函数:在整个字符序列中查找正则表达式e的所有匹配,每次匹配成功后,就根据参数fmt对字符串进行格式化。没有匹配则不会修改字符串。template basic_string regex_replace( const basic_string& s, const basic_regex& e, const basic_string& fmt, match_flag_type flags = match_default);这三个算法有三种不同的重载形式(参数的不同):1. const charT*(charT为字符类型):指针2. const basic_string&:引用3. bidirectional_iterator bit:双向迭代器Boost.Regex的用法:1.包含头文件:#include2. 声明一个类型为basic_regex的变量,只要将一个含有要用的正则表达式的字符串传递给构造函数,eg:boost:regex reg(“(A.*)”) 。boost:regex reg(d3a-zA-Z+.(d2|N/A)s);为了可以引用表达式 a-zA-Z+, 我们必须先把它用圆括号括起来。这使得表达式(a-zA-Z+)成为我们的正则表达式中的第一个子表达式,为了在字符串后面再次匹配第一个字表达式,可以用1来建立反向引用。3.在boost:regex中使用正则表达式时,如d表示匹配数字,但是需要加双”即为:d等于测试其中d4. 表达式 $N表示匹配的子表达式,N 为子表达式索引。因此我们的格式化串应该是 $1$3, 表示替换文本为第一个和第三个子表达式.5. 你可以用一些特定的缓冲操作符来让 regex_search 象 regex_match 那样运行。A 匹配缓冲的起始点,而 Z 匹配缓冲的结束点, 把 A 放在正则表达式的开始,把 Z 放在最后,你就可以让 regex_search 象 regex_match 那样使用,即必须匹配所有输入。6.关于重复和贪婪特殊含义符:+、*是贪婪的,会消耗尽可能多的输入。eg:boost:regex reg(.*)(d2);会导致你的输入无法完成匹配,因为.*已经将 所有输入完全消耗。在.*后面加?就能转化为非贪婪模式。7.根据所用的字符串类型决定匹配结果的变量类型templateclassIterator,classAllocator=std:allocatorsub_match class match_results;typedef match_results cmatch;/字符序列常量typedef match_results wcmatch;/宽字符序列常量typedef match_results smatch;/string常迭代器。typedef match_results wsmatch;/宽string常迭代器。8. regex_iterator:本迭代器类型用一个序列来列举正则表达式的所有匹配。eg:boost:regex reg(d+),?); std:string s=1,1,2,3,5,8,13,21; boost:sregex_iterator it(s.begin(),s.end(),reg); boost:sregex_iterator end; regex_callback c; int sum=for_each(it,end,c).sum();注:传递给for_each的end迭代器是 regex_iterator 一个缺省构造实例。it 和 end 的类型均为 boost:sregex_iterator, 即为 regex_iterator的typedef. 这种使用 regex_iterator 的方法要比我们前面试过的多次匹配的方法更清晰,在多次匹配的方法中我们不得不在一个循环中让起始迭代器不断地前进并调用 regex_search 。9.正则表达式异常处理try boost:regex reg(s); catch(const boost:bad_expression& e) 三个可能会发生异常的地方:1.是在构造一个正则表达式时,正则表达式不能被编译通过;2.是使用成员函数 assign

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论