首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::regex_match

Defined in header <regex>

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().first

first

m.prefix().second

first

m.prefix().matched

false (the match prefix is empty)

m.suffix().first

last

m.suffix().second

last

m.suffix().matched

false (the match suffix is empty)

m0.first

first

m0.second

last

m0.matched

true (the entire sequence is matched)

mn.first

the start of the sequence that matched marked sub-expression n, or last if the subexpression did not participate in the match

mn.second

the end of the sequence that matched marked sub-expression n, or last if the subexpression did not participate in the match

mn.matched

true if sub-expression n participated in the match, false otherwise

注记

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

二次

代码语言:javascript
复制
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

二次

二次

代码语言:javascript
复制
#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';
            }   
        }   
    }   
}

二次

产出:

二次

代码语言:javascript
复制
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)

代码语言:txt
复制
 © cppreference.com

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

扫码关注腾讯云开发者

领取腾讯云代金券