过去许多或多或少标准化的程序库被创建用来处理正则表达式。有鉴于这些算法的使用非常普遍,因此标准程序库将会包含他们,并使用各种面向对象语言的潜力。
这个新的程序库,被定义于<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> 不需要改动到现有的头文件,同时也不需要对现有的语言作扩展。