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> 不需要改动到现有的头文件,同时也不需要对现有的语言作扩展。

原创粉丝点击