标准库标头 <regex>
来自cppreference.com
此标头是文本处理库的一部分。
包含 | ||
(C++20) | 三路比较运算符支持 | |
(C++11) | std::initializer_list 类模板 | |
类 | ||
(C++11) | 正则表达式对象 (类模板) | |
std::regex | std::basic_regex<char>(typedef) | |
std::wregex | std::basic_regex<wchar_t>(typedef) | |
(C++11) | 标识子表达式所匹配的字符序列 (类模板) | |
std::csub_match | std::sub_match<constchar*>(typedef) | |
std::wcsub_match | std::sub_match<constwchar_t*>(typedef) | |
std::ssub_match | std::sub_match<std::string::const_iterator>(typedef) | |
std::wssub_match | std::sub_match<std::wstring::const_iterator>(typedef) | |
(C++11) | 标识一个正则表达式匹配,包含所有子表达式匹配 (类模板) | |
std::cmatch | std::match_results<constchar*>(typedef) | |
std::wcmatch | std::match_results<constwchar_t*>(typedef) | |
std::smatch | std::match_results<std::string::const_iterator>(typedef) | |
std::wsmatch | std::match_results<std::wstring::const_iterator>(typedef) | |
(C++11) | 迭代一个字符序列中的所有正则表达式匹配 (类模板) | |
std::cregex_iterator | std::regex_iterator<constchar*>(typedef) | |
std::wcregex_iterator | std::regex_iterator<constwchar_t*>(typedef) | |
std::sregex_iterator | std::regex_iterator<std::string::const_iterator>(typedef) | |
std::wsregex_iterator | std::regex_iterator<std::wstring::const_iterator>(typedef) | |
(C++11) | 迭代给定字符串中的所有正则表达式匹配中的指定子表达式,或迭代未匹配的子字符串 (类模板) | |
std::cregex_token_iterator | std::regex_token_iterator<constchar*>(typedef) | |
std::wcregex_token_iterator | std::regex_token_iterator<constwchar_t*>(typedef) | |
std::sregex_token_iterator | std::regex_token_iterator<std::string::const_iterator>(typedef) | |
std::wsregex_token_iterator | std::regex_token_iterator<std::wstring::const_iterator>(typedef) | |
(C++11) | 报告正则表达式库生成的错误 (类) | |
(C++11) | 提供正则表达式库所需的关于字符类型的元信息 (类模板) | |
regex 常量类型 | ||
在命名空间 std::regex_constants 定义 | ||
(C++11) | 控制正则表达式行为的通用选项 (typedef) | |
(C++11) | 特定于匹配的选项 (typedef) | |
(C++11) | 描述不同类型的匹配错误 (typedef) | |
函数 | ||
算法 | ||
(C++11) | 尝试匹配一个正则表达式到整个字符序列 (函数模板) | |
(C++11) | 尝试匹配一个正则表达式到字符序列的任何部分 (函数模板) | |
(C++11) | 以格式化的替换文本来替换正则表达式匹配的出现位置 (函数模板) | |
非成员操作 | ||
(C++11) | 特化 std::swap 算法 (函数模板) | |
(C++20 移除)(C++20 移除)(C++20 移除)(C++20 移除)(C++20 移除)(C++20) | 比较一个 sub_match 与另一 sub_match 、字符串或字符 (函数模板) | |
输出匹配的字符子序列 (函数模板) | ||
(C++20 移除) | 以字典序比较两个匹配结果的值 (函数模板) | |
特化 std::swap 算法 (函数模板) | ||
范围访问 | ||
(C++11)(C++14) | 返回指向容器或数组起始的迭代器 (函数模板) | |
(C++11)(C++14) | 返回指向容器或数组结尾的迭代器 (函数模板) | |
(C++14) | 返回指向一个容器或数组的逆向迭代器 (函数模板) | |
(C++14) | 返回容器或数组的逆向尾迭代器 (函数模板) | |
(C++17)(C++20) | 返回容器或数组的大小 (函数模板) | |
(C++17) | 检查容器是否为空 (函数模板) | |
(C++17) | 获得指向底层数组的指针 (函数模板) |
[编辑]概要
#include <compare>#include <initializer_list> namespace std {// regex 常量namespace regex_constants {using syntax_option_type =/*T1*/;using match_flag_type =/*T2*/;using error_type =/*T3*/;} // 类 regex_errorclass regex_error; // 类模板 regex_traitstemplate<class CharT>struct regex_traits; // 类模板 basic_regextemplate<class CharT, class Traits = regex_traits<CharT>>class basic_regex; using regex = basic_regex<char>;using wregex = basic_regex<wchar_t>; // basic_regex 交换template<class CharT, class Traits>void swap(basic_regex<CharT, Traits>& e1, basic_regex<CharT, Traits>& e2); // 类模板 sub_matchtemplate<class BiIt>class sub_match; using csub_match = sub_match<constchar*>;using wcsub_match = sub_match<constwchar_t*>;using ssub_match = sub_match<string::const_iterator>;using wssub_match = sub_match<wstring::const_iterator>; // sub_match 非成员运算符template<class BiIt>bool operator==(const sub_match<BiIt>& lhs, const sub_match<BiIt>& rhs);template<class BiIt>auto operator<=>(const sub_match<BiIt>& lhs, const sub_match<BiIt>& rhs); template<class BiIt, class ST, class SA>bool operator==(const sub_match<BiIt>& lhs, const basic_string<typename iterator_traits<BiIt>::value_type, ST, SA>& rhs);template<class BiIt, class ST, class SA>auto operator<=>(const sub_match<BiIt>& lhs, const basic_string<typename iterator_traits<BiIt>::value_type, ST, SA>& rhs); template<class BiIt>bool operator==(const sub_match<BiIt>& lhs, consttypename iterator_traits<BiIt>::value_type* rhs);template<class BiIt>auto operator<=>(const sub_match<BiIt>& lhs, consttypename iterator_traits<BiIt>::value_type* rhs); template<class BiIt>bool operator==(const sub_match<BiIt>& lhs, consttypename iterator_traits<BiIt>::value_type& rhs);template<class BiIt>auto operator<=>(const sub_match<BiIt>& lhs, consttypename iterator_traits<BiIt>::value_type& rhs); template<class CharT, class ST, class BiIt> basic_ostream<CharT, ST>& operator<<(basic_ostream<CharT, ST>& os, const sub_match<BiIt>& m); // 类模板 match_resultstemplate<class BiIt, class Allocator = allocator<sub_match<BiIt>>>class match_results; using cmatch = match_results<constchar*>;using wcmatch = match_results<constwchar_t*>;using smatch = match_results<string::const_iterator>;using wsmatch = match_results<wstring::const_iterator>; // match_results 比较template<class BiIt, class Allocator>bool operator==(const match_results<BiIt, Allocator>& m1, const match_results<BiIt, Allocator>& m2); // match_results 交换template<class BiIt, class Allocator>void swap(match_results<BiIt, Allocator>& m1, match_results<BiIt, Allocator>& m2); // 函数模板 regex_matchtemplate<class BiIt, class Allocator, class CharT, class Traits>bool regex_match(BiIt first, BiIt last, match_results<BiIt, Allocator>& m, const basic_regex<CharT, Traits>& e, regex_constants::match_flag_type flags = regex_constants::match_default);template<class BiIt, class CharT, class Traits>bool regex_match(BiIt first, BiIt last, const basic_regex<CharT, Traits>& e, regex_constants::match_flag_type flags = regex_constants::match_default);template<class CharT, class Allocator, class Traits>bool regex_match(const CharT* str, match_results<const CharT*, Allocator>& m, const basic_regex<CharT, Traits>& e, regex_constants::match_flag_type flags = regex_constants::match_default);template<class ST, class SA, class Allocator, class CharT, class Traits>bool regex_match(const basic_string<CharT, ST, SA>& s, match_results<typename basic_string<CharT, ST, SA>::const_iterator, Allocator>& m, const basic_regex<CharT, Traits>& e, regex_constants::match_flag_type flags = regex_constants::match_default);template<class ST, class SA, class Allocator, class CharT, class Traits>bool regex_match(const basic_string<CharT, ST, SA>&&, match_results<typename basic_string<CharT, ST, SA>::const_iterator, Allocator>&, const basic_regex<CharT, Traits>&, regex_constants::match_flag_type= regex_constants::match_default)= delete;template<class CharT, class Traits>bool regex_match(const CharT* str, const basic_regex<CharT, Traits>& e, regex_constants::match_flag_type flags = regex_constants::match_default);template<class ST, class SA, class CharT, class Traits>bool regex_match(const basic_string<CharT, ST, SA>& s, const basic_regex<CharT, Traits>& e, regex_constants::match_flag_type flags = regex_constants::match_default); // 函数模板 regex_searchtemplate<class BiIt, class Allocator, class CharT, class Traits>bool regex_search(BiIt first, BiIt last, match_results<BiIt, Allocator>& m, const basic_regex<CharT, Traits>& e, regex_constants::match_flag_type flags = regex_constants::match_default);template<class BiIt, class CharT, class Traits>bool regex_search(BiItfirst, BiIt last, const basic_regex<CharT, Traits>& e, regex_constants::match_flag_type flags = regex_constants::match_default);template<class CharT, class Allocator, class Traits>bool regex_search(const CharT* str, match_results<const CharT*, Allocator>& m, const basic_regex<CharT, Traits>& e, regex_constants::match_flag_type flags = regex_constants::match_default);template<class CharT, class Traits>bool regex_search(const CharT* str, const basic_regex<CharT, Traits>& e, regex_constants::match_flag_type flags = regex_constants::match_default);template<class ST, class SA, class CharT, class Traits>bool regex_search(const basic_string<CharT, ST, SA>& s, const basic_regex<CharT, Traits>& e, regex_constants::match_flag_type flags = regex_constants::match_default);template<class ST, class SA, class Allocator, class CharT, class Traits>bool regex_search(const basic_string<CharT, ST, SA>& s, match_results<typename basic_string<CharT, ST, SA>::const_iterator, Allocator>& m, const basic_regex<CharT, Traits>& e, regex_constants::match_flag_type flags = regex_constants::match_default);template<class ST, class SA, class Allocator, class CharT, class Traits>bool regex_search(const basic_string<CharT, ST, SA>&&, match_results<typename basic_string<CharT, ST, SA>::const_iterator, Allocator>&, const basic_regex<CharT, Traits>&, regex_constants::match_flag_type= regex_constants::match_default)= delete; // 函数模板 regex_replacetemplate<class OutputIt, class BiIt, class Traits, class CharT, class ST, class SA> OutputIt regex_replace(OutputIt out, BiIt first, BiIt last, const basic_regex<CharT, Traits>& e, const basic_string<CharT, ST, SA>& fmt, regex_constants::match_flag_type flags = regex_constants::match_default);template<class OutputIt, class BiIt, class Traits, class CharT> OutputIt regex_replace(OutputIt out, BiIt first, BiIt last, const basic_regex<CharT, Traits>& e, const CharT* fmt, regex_constants::match_flag_type flags = regex_constants::match_default);template<class Traits, class CharT, class ST, class SA, class FST, class FSA> basic_string<CharT, ST, SA> regex_replace(const basic_string<CharT, ST, SA>& s, const basic_regex<CharT, Traits>& e, const basic_string<CharT, FST, FSA>& fmt, regex_constants::match_flag_type flags = regex_constants::match_default);template<class Traits, class CharT, class ST, class SA> basic_string<CharT, ST, SA> regex_replace(const basic_string<CharT, ST, SA>& s, const basic_regex<CharT, Traits>& e, const CharT* fmt, regex_constants::match_flag_type flags = regex_constants::match_default);template<class Traits, class CharT, class ST, class SA> basic_string<CharT> regex_replace(const CharT* s, const basic_regex<CharT, Traits>& e, const basic_string<CharT, ST, SA>& fmt, regex_constants::match_flag_type flags = regex_constants::match_default);template<class Traits, class CharT> basic_string<CharT> regex_replace(const CharT* s, const basic_regex<CharT, Traits>& e, const CharT* fmt, regex_constants::match_flag_type flags = regex_constants::match_default); // 类模板 regex_iteratortemplate<class BiIt, class CharT =typename iterator_traits<BiIt>::value_type, class Traits = regex_traits<CharT>>class regex_iterator; using cregex_iterator = regex_iterator<constchar*>;using wcregex_iterator = regex_iterator<constwchar_t*>;using sregex_iterator = regex_iterator<string::const_iterator>;using wsregex_iterator = regex_iterator<wstring::const_iterator>; // 类模板 regex_token_iteratortemplate<class BiIt, class CharT =typename iterator_traits<BiIt>::value_type, class Traits = regex_traits<CharT>>class regex_token_iterator; using cregex_token_iterator = regex_token_iterator<constchar*>;using wcregex_token_iterator = regex_token_iterator<constwchar_t*>;using sregex_token_iterator = regex_token_iterator<string::const_iterator>;using wsregex_token_iterator = regex_token_iterator<wstring::const_iterator>; namespace pmr {template<class BiIt>using match_results =std::match_results<BiIt, polymorphic_allocator<sub_match<BiIt>>>; using cmatch = match_results<constchar*>;using wcmatch = match_results<constwchar_t*>;using smatch = match_results<string::const_iterator>;using wsmatch = match_results<wstring::const_iterator>;}}
[编辑]位掩码类型 std::regex_constants::syntax_option_type
namespace std::regex_constants{using syntax_option_type =/*T1*/;inlineconstexpr syntax_option_type icase =/* 未指明 */;inlineconstexpr syntax_option_type nosubs =/* 未指明 */;inlineconstexpr syntax_option_type optimize =/* 未指明 */;inlineconstexpr syntax_option_type collate =/* 未指明 */;inlineconstexpr syntax_option_type ECMAScript =/* 未指明 */;inlineconstexpr syntax_option_type basic =/* 未指明 */;inlineconstexpr syntax_option_type extended =/* 未指明 */;inlineconstexpr syntax_option_type awk =/* 未指明 */;inlineconstexpr syntax_option_type grep =/* 未指明 */;inlineconstexpr syntax_option_type egrep =/* 未指明 */;inlineconstexpr syntax_option_type multiline =/* 未指明 */;}
[编辑]位掩码类型 std::regex_constants::match_flag_type
namespace std::regex_constants{using match_flag_type =/*T2*/;inlineconstexpr match_flag_type match_default={};inlineconstexpr match_flag_type match_not_bol =/* 未指明 */;inlineconstexpr match_flag_type match_not_eol =/* 未指明 */;inlineconstexpr match_flag_type match_not_bow =/* 未指明 */;inlineconstexpr match_flag_type match_not_eow =/* 未指明 */;inlineconstexpr match_flag_type match_any =/* 未指明 */;inlineconstexpr match_flag_type match_not_null =/* 未指明 */;inlineconstexpr match_flag_type match_continuous =/* 未指明 */;inlineconstexpr match_flag_type match_prev_avail =/* 未指明 */;inlineconstexpr match_flag_type format_default={};inlineconstexpr match_flag_type format_sed =/* 未指明 */;inlineconstexpr match_flag_type format_no_copy =/* 未指明 */;inlineconstexpr match_flag_type format_first_only =/* 未指明 */;}
[编辑]被枚举类型 std::regex_constants::error_type
namespace std::regex_constants{using error_type =/*T3*/;inlineconstexpr error_type error_collate =/* 未指明 */;inlineconstexpr error_type error_ctype =/* 未指明 */;inlineconstexpr error_type error_escape =/* 未指明 */;inlineconstexpr error_type error_backref =/* 未指明 */;inlineconstexpr error_type error_brack =/* 未指明 */;inlineconstexpr error_type error_paren =/* 未指明 */;inlineconstexpr error_type error_brace =/* 未指明 */;inlineconstexpr error_type error_badbrace =/* 未指明 */;inlineconstexpr error_type error_range =/* 未指明 */;inlineconstexpr error_type error_space =/* 未指明 */;inlineconstexpr error_type error_badrepeat =/* 未指明 */;inlineconstexpr error_type error_complexity =/* 未指明 */;inlineconstexpr error_type error_stack =/* 未指明 */;}
[编辑]类 std::regex_error
namespace std {class regex_error :public runtime_error {public:explicit regex_error(regex_constants::error_type ecode); regex_constants::error_type code()const;};}
[编辑]类模板 std::regex_traits
namespace std {template<class CharT>struct regex_traits {using char_type = CharT;using string_type = basic_string<char_type>;using locale_type = locale;using char_class_type =/* 位掩码类型 */; regex_traits();static size_t length(const char_type* p); CharT translate(CharT c)const; CharT translate_nocase(CharT c)const;template<class ForwardIt> string_type transform(ForwardIt first, ForwardIt last)const;template<class ForwardIt> string_type transform_primary(ForwardIt first, ForwardIt last)const;template<class ForwardIt> string_type lookup_collatename(ForwardIt first, ForwardIt last)const;template<class ForwardIt> char_class_type lookup_classname(ForwardIt first, ForwardIt last, bool icase =false)const;bool isctype(CharT c, char_class_type f)const;int value(CharT ch, int radix)const; locale_type imbue(locale_type l); locale_type getloc()const;};}
[编辑]类模板 std::basic_regex
namespace std {template<class CharT, class Traits = regex_traits<CharT>>class basic_regex {public:// 类型using value_type = CharT;using Traits_type = Traits;using string_type =typename Traits::string_type;using flag_type = regex_constants::syntax_option_type;using locale_type =typename Traits::locale_type; // 常量staticconstexpr flag_type icase = regex_constants::icase;staticconstexpr flag_type nosubs = regex_constants::nosubs;staticconstexpr flag_type optimize = regex_constants::optimize;staticconstexpr flag_type collate = regex_constants::collate;staticconstexpr flag_type ECMAScript = regex_constants::ECMAScript;staticconstexpr flag_type basic = regex_constants::basic;staticconstexpr flag_type extended = regex_constants::extended;staticconstexpr flag_type awk = regex_constants::awk;staticconstexpr flag_type grep = regex_constants::grep;staticconstexpr flag_type egrep = regex_constants::egrep;staticconstexpr flag_type multiline = regex_constants::multiline; // 构造/复制/销毁 basic_regex();explicit basic_regex(const CharT* p, flag_type f = regex_constants::ECMAScript); basic_regex(const CharT* p, size_t len, flag_type f = regex_constants::ECMAScript); basic_regex(const basic_regex&); basic_regex(basic_regex&&)noexcept;template<class ST, class SA>explicit basic_regex(const basic_string<CharT, ST, SA>& s, flag_type f = regex_constants::ECMAScript);template<class ForwardIt> basic_regex(ForwardIt first, ForwardIt last, flag_type f = regex_constants::ECMAScript); basic_regex(initializer_list<CharT> il, flag_type f = regex_constants::ECMAScript); ~basic_regex(); // 赋值 basic_regex& operator=(const basic_regex& e); basic_regex& operator=(basic_regex&& e)noexcept; basic_regex& operator=(const CharT* p); basic_regex& operator=(initializer_list<CharT> il);template<class ST, class SA> basic_regex& operator=(const basic_string<CharT, ST, SA>& s); basic_regex& assign(const basic_regex& e); basic_regex& assign(basic_regex&& e)noexcept; basic_regex& assign(const CharT* p, flag_type f = regex_constants::ECMAScript); basic_regex& assign(const CharT* p, size_t len, flag_type f = regex_constants::ECMAScript);template<class ST, class SA> basic_regex& assign(const basic_string<CharT, ST, SA>& s, flag_type f = regex_constants::ECMAScript);template<class InputIt> basic_regex& assign(InputIt first, InputIt last, flag_type f = regex_constants::ECMAScript); basic_regex& assign(initializer_list<CharT>, flag_type f = regex_constants::ECMAScript); // const 操作unsigned mark_count()const; flag_type flags()const; // 本地环境 locale_type imbue(locale_type loc); locale_type getloc()const; // 交换void swap(basic_regex&);}; template<class ForwardIt> basic_regex(ForwardIt, ForwardIt, regex_constants::syntax_option_type= regex_constants::ECMAScript)-> basic_regex<typename iterator_traits<ForwardIt>::value_type>;}
[编辑]类模板 std::sub_match
namespace std {template<class BiIt>class sub_match :public pair<BiIt, BiIt>{public:using value_type =typename iterator_traits<BiIt>::value_type;using difference_type =typename iterator_traits<BiIt>::difference_type;using iterator = BiIt;using string_type = basic_string<value_type>; bool matched; constexpr sub_match(); difference_type length()const; operator string_type()const; string_type str()const; int compare(const sub_match& s)const;int compare(const string_type& s)const;int compare(const value_type* s)const; void swap(sub_match& s)noexcept(/* 见描述 */);};}
[编辑]类模板 std::match_results
namespace std {template<class BiIt, class Allocator = allocator<sub_match<BiIt>>>class match_results {public:using value_type = sub_match<BiIt>;using const_reference =const value_type&;using reference = value_type&;using const_iterator =/* 由实现定义 */;using iterator = const_iterator;using difference_type =typename iterator_traits<BiIt>::difference_type;using size_type =typename allocator_traits<Allocator>::size_type;using allocator_type = Allocator;using char_type =typename iterator_traits<BiIt>::value_type;using string_type = basic_string<char_type>; // 构造/复制/销毁 match_results(): match_results(Allocator()){}explicit match_results(const Allocator& a); match_results(const match_results& m); match_results(const match_results& m, const Allocator& a); match_results(match_results&& m)noexcept; match_results(match_results&& m, const Allocator& a); match_results& operator=(const match_results& m); match_results& operator=(match_results&& m); ~match_results(); // 状态bool ready()const; // 大小 size_type size()const; size_type max_size()const;bool empty()const; // 元素访问 difference_type length(size_type sub =0)const; difference_type position(size_type sub =0)const; string_type str(size_type sub =0)const; const_reference operator[](size_type n)const; const_reference prefix()const; const_reference suffix()const; const_iterator begin()const; const_iterator end()const; const_iterator cbegin()const; const_iterator cend()const; // 格式template<class OutputIt> OutputIt format(OutputIt out, const char_type* fmt_first, const char_type* fmt_last, regex_constants::match_flag_type flags = regex_constants::format_default)const;template<class OutputIt, class ST, class SA> OutputIt format(OutputIt out, const basic_string<char_type, ST, SA>& fmt, regex_constants::match_flag_type flags = regex_constants::format_default)const;template<class ST, class SA> basic_string<char_type, ST, SA> format(const basic_string<char_type, ST, SA>& fmt, regex_constants::match_flag_type flags = regex_constants::format_default)const; string_type format(const char_type* fmt, regex_constants::match_flag_type flags = regex_constants::format_default)const; // 分配器 allocator_type get_allocator()const; // 交换void swap(match_results& that);};}