定义变量:typedef basic_regex typedef basic_regex 1. 匹配检测函数:template bool regex_match( const charT* str, //待匹配字符串 match_results match_flag_type flags = match_default);//匹配标志,否则采用默 认匹配标志 注明:只有当字符串完全匹配才返回true 2. 字符串搜索函数:查找子序列,该子序列匹配正则表达式e。 template match_results 3. 字符串替换函数:在整个字符序列中查找正则表达式e的所有匹配,每次匹配成功后,就根据参数fmt对字符串进行格式化。没有匹配则不会修改字符串。 template 1. const charT*(charT为字符类型):指针 2. const basic_string Boost.Regex的用法: 1.包含头文件:#include 2. 声明一个类型为basic_regex的变量,只要将一个含有要用的正则表达式的字符串传递给构造函数,eg:boost::regex reg(“(A.*)”) 。 boost::regex reg(\"\\\\d{3}[a-zA-Z]+.(\\\\d{2}|N/A)\\\\s\"); 为了可以引用表达式 [a-zA-Z]+, 我们必须先把它用圆括号括起来。这使得表达式([a-zA-Z]+)成为我们的正则表达式中的第一个子表达式,为了在字符串后面再次匹配第一个字表达式,可以用\\1来建立反向引用。 3.在boost::regex中使用正则表达式时,如\\d表示匹配数字,但是需要加双”\\\\”即为:\\\\d等于测试其中\\d 4. 表达式 $N表示匹配的子表达式, N 为子表达式索引。因此我们的 格式化串应该是 \"$1$3\", 表示替换文本为第一个和第三个子表达式. 5. 你可以用一些特定的缓冲操作符来让 regex_search 象 regex_match 那样运行。\\A 匹配缓冲的起始点,而 \\Z 匹配缓冲的结束点, 把 \\A 放在正则表达式的开始,把 \\Z 放在最后,你就可以让 regex_search 象 regex_match 那样使用,即必须匹配所有输入。 6.关于重复和贪婪 特殊含义符:+、*是贪婪的,会消耗尽可能多的输入。 eg:boost::regex reg(\"(.*)(\\\\d{2})\");会导致你的输入无法完成匹配,因为.*已经将 所有输入完全消耗。在.*后面加?就能转化为非贪婪模式。 7.根据所用的字符串类型决定匹配结果的变量类型 template typedef match_results typedef match_results typedef match_results typedef match_results 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 boost::regex reg(s); } catch(const boost::bad_expression& e) { } 三个可能会发生异常的地方: 1.是在构造一个正则表达式时,正则表达式不能被编译通过; 2.是使用成员函数 assign 把正则表达式赋给一个 regex 时; 3.是regex迭代器和算法也可能抛出异常,如果内存不够或者匹配的复杂度过快增长的话。 正则表达式小知识点: 1. 用中括号 [^] 包含多个字符,构成否定格式,可以匹配所包含的字符之外的任意一个字符。 因篇幅问题不能全部显示,请点此查看更多更全内容