在线文档教程
C++
规律表达 | Regular expressions

std::regex_match

STD::regex[医]匹配

Defined in header
template< class BidirIt, class Alloc, class CharT, class Traits > bool regex_match( BidirIt first, BidirIt last, std::match_results<BidirIt,Alloc>& m, const std::basic_regex<CharT,Traits>& e, std::regex_constants::match_flag_type flags = std::regex_constants::match_default (1)(since C++11)
template< class BidirIt, class CharT, class Traits > bool regex_match( BidirIt first, BidirIt last, const std::basic_regex<CharT,Traits>& e, std::regex_constants::match_flag_type flags = std::regex_constants::match_default (2)(since C++11)
template< class CharT, class Alloc, class Traits > bool regex_match( const CharT* str, std::match_results<const CharT*,Alloc>& m, const std::basic_regex<CharT,Traits>& e, std::regex_constants::match_flag_type flags = std::regex_constants::match_default (3)(since C++11)
template< class STraits, class SAlloc, class Alloc, class CharT, class Traits > bool regex_match( const std::basic_string<CharT,STraits,SAlloc>& s, std::match_results< typename std::basic_string<CharT,STraits,SAlloc>::const_iterator, Alloc >& m, const std::basic_regex<CharT,Traits>& e, std::regex_constants::match_flag_type flags = std::regex_constants::match_default (4)(since C++11)
template< class CharT, class Traits > bool regex_match( const CharT* str, const std::basic_regex<CharT,Traits>& e, std::regex_constants::match_flag_type flags = std::regex_constants::match_default (5)(since C++11)
template< class STraits, class SAlloc, class CharT, class Traits > bool regex_match( const std::basic_string<CharT, STraits, SAlloc>& s, const std::basic_regex<CharT,Traits>& e, std::regex_constants::match_flag_type flags = std::regex_constants::match_default (6)(since C++11)
template< class STraits, class SAlloc, class Alloc, class CharT, class Traits > bool regex_match( const std::basic_string<CharT,STraits,SAlloc>&&, std::match_results< typename std::basic_string<CharT,STraits,SAlloc>::const_iterator, Alloc >&, const std::basic_regex<CharT,Traits>&, std::regex_constants::match_flag_type flags = std::regex_constants::match_default ) = delete;(7)(since C++14)

确定正则表达式是否el匹配整个目标字符序列,这些字符序列可以指定为std::string、C-字符串或迭代器对。

1%29确定正则表达式之间是否匹配。e和整个目标字符序列[first,last),考虑到...的影响flags在确定是否有匹配时,只考虑与整个字符序列匹配的潜在匹配。中返回匹配结果。m...

2%29在上面表现为%281%29,省略了匹配结果。

3%29std::regex_match(str, str +std::char_traits<charT>::length(str), m, e, flags)...

4%29std::regex_match(s.begin(), s.end(), m, e, flags)...

5%29std::regex_match(str, str +std::char_traits<charT>::length(str), e, flags)...

6%29std::regex_match(s.begin(), s.end(), e, flags)...

7%29禁止重载4接受临时字符串,否则此函数将填充匹配。[医]结果:m与字符串迭代器一起,这些迭代器立即失效。

请注意regex_match将只成功地将正则表达式匹配到字符序列,而std::regex_search将成功匹配子序列。

参数

first, last-the target character range to apply the regex to, given as iterators
m-the match results
str-the target string, given as a null-terminated C-style string
s-the target string, given as a std::basic_string
e-the regular expression
flags-flags used to determine how the match will be performed

类型要求

-Bidirit必须符合双向迭代器的要求。

返回值

回报true如果有匹配,false否则。在任何一种情况下,对象m更新如下:

如果不存在匹配:

m就绪%28%29==真

*。

空%28%29==真

M.尺寸%28%29=0

如果存在匹配:

m.ready()true
m.empty()false
m.size()number of marked subexpressions plus 1, that is, 1+e.mark_count()
m.prefix().firstfirst
m.prefix().secondfirst
m.prefix().matchedfalse (the match prefix is empty)
m.suffix().firstlast
m.suffix().secondlast
m.suffix().matchedfalse (the match suffix is empty)
m0.firstfirst
m0.secondlast
m0.matchedtrue (the entire sequence is matched)
mn.firstthe start of the sequence that matched marked sub-expression n, or last if the subexpression did not participate in the match
mn.secondthe end of the sequence that matched marked sub-expression n, or last if the subexpression did not participate in the match
mn.matchedtrue if sub-expression n participated in the match, false otherwise

注记

因为regex_match只考虑完全匹配,相同的正则表达式可能在regex_matchstd::regex_search*

二次

std::regex re("Get|GetValue" std::cmatch m; std::regex_search("GetValue", m, re // returns true, and m[0] contains "Get" std::regex_match ("GetValue", m, re // returns true, and m[0] contains "GetValue" std::regex_search("GetValues", m, re // returns true, and m[0] contains "Get" std::regex_match ("GetValues", m, re // returns false

二次

二次

#include <iostream> #include <string> #include <regex> int main() { // Simple regular expression matching std::string fnames[] = {"foo.txt", "bar.txt", "baz.dat", "zoidberg"}; std::regex txt_regex("[a-z]+\\.txt" for (const auto &fname : fnames) { std::cout << fname << ": " << std::regex_match(fname, txt_regex) << '\n'; } // Extraction of a sub-match std::regex base_regex("([a-z]+)\\.txt" std::smatch base_match; for (const auto &fname : fnames) { if (std::regex_match(fname, base_match, base_regex)) { // The first sub_match is the whole string; the next // sub_match is the first parenthesized expression. if (base_match.size() == 2) { std::ssub_match base_sub_match = base_match[1]; std::string base = base_sub_match.str( std::cout << fname << " has a base of " << base << '\n'; } } } // Extraction of several sub-matches std::regex pieces_regex("([a-z]+)\\.([a-z]+)" std::smatch pieces_match; for (const auto &fname : fnames) { if (std::regex_match(fname, pieces_match, pieces_regex)) { std::cout << fname << '\n'; for (size_t i = 0; i < pieces_match.size( ++i) { std::ssub_match sub_match = pieces_match[i]; std::string piece = sub_match.str( std::cout << " submatch " << i << ": " << piece << '\n'; } } } }

二次

产出:

二次

foo.txt: 1 bar.txt: 1 baz.dat: 0 zoidberg: 0 foo.txt has a base of foo bar.txt has a base of bar foo.txt submatch 0: foo.txt submatch 1: foo submatch 2: txt bar.txt submatch 0: bar.txt submatch 1: bar submatch 2: txt baz.dat submatch 0: baz.dat submatch 1: baz submatch 2: dat

二次

另见

basic_regex (C++11)regular expression object (class template)
match_results (C++11)identifies one regular expression match, including all sub-expression matches (class template)
regex_search (C++11)attempts to match a regular expression to any part of a character sequence (function template)

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/regex/regex[医]匹配