GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::regex_match(3) C++ Standard Libary std::regex_match(3)

std::regex_match - std::regex_match


Defined in header <regex>
template< class BidirIt,


class Alloc, class CharT, class Traits >
bool regex_match( BidirIt first, BidirIt last, (since
std::match_results<BidirIt,Alloc>& m, (1) C++11)
const std::basic_regex<CharT,Traits>& e,
std::regex_constants::match_flag_type flags =


std::regex_constants::match_default );
template< class BidirIt,


class CharT, class Traits >
bool regex_match( BidirIt first, BidirIt last, (2) (since
const std::basic_regex<CharT,Traits>& e, C++11)
std::regex_constants::match_flag_type flags =


std::regex_constants::match_default );
template< class CharT, class Alloc, class Traits >


bool regex_match( const CharT* str,
std::match_results<const CharT*,Alloc>& m, (3) (since
const std::basic_regex<CharT,Traits>& e, C++11)
std::regex_constants::match_flag_type flags =


std::regex_constants::match_default );
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, (4) (since
Alloc C++11)
>& m,
const std::basic_regex<CharT,Traits>& e,
std::regex_constants::match_flag_type flags =


std::regex_constants::match_default );
template< class CharT, class Traits >


bool regex_match( const CharT* str, (since
const std::basic_regex<CharT,Traits>& e, (5) C++11)
std::regex_constants::match_flag_type flags =


std::regex_constants::match_default );
template< class STraits, class SAlloc,


class CharT, class Traits >
bool regex_match( const std::basic_string<CharT, STraits, SAlloc>& s, (6) (since
const std::basic_regex<CharT,Traits>& e, C++11)
std::regex_constants::match_flag_type flags =


std::regex_constants::match_default );
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, (7) (since
Alloc C++11)
>&,
const std::basic_regex<CharT,Traits>&,
std::regex_constants::match_flag_type flags =


std::regex_constants::match_default ) = delete;


Determines if the regular expression e matches the entire target character sequence,
which may be specified as std::string, a C-string, or an iterator pair.


1) Determines if there is a match between the regular expression e and the entire
target character sequence [first,last), taking into account the effect of flags.
When determining if there is a match, only potential matches that match the entire
character sequence are considered. Match results are returned in m.
2) Behaves as (1) above, omitting the match results.
3) Returns std::regex_match(str, str + std::char_traits<charT>::length(str), m, e,
flags).
4) Returns std::regex_match(s.begin(), s.end(), m, e, flags).
5) Returns std::regex_match(str, str + std::char_traits<charT>::length(str), e,
flags).
6) Returns std::regex_match(s.begin(), s.end(), e, flags).
7) The overload (4) is prohibited from accepting temporary strings, otherwise this
function populates match_results m with string iterators that become invalid
immediately.


Note that regex_match will only successfully match a regular expression to an entire
character sequence, whereas std::regex_search will successfully match subsequences.


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 must meet the requirements of LegacyBidirectionalIterator.


Returns true if a match exists, false otherwise. In either case, the object m is
updated, as follows:


If the match does not exist:


m.ready() == true
m.empty() == true
m.size() == 0


If the match exists:


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)
m[0].first first
m[0].second last
m[0].matched true (the entire sequence is matched)
m[n].first the start of the sequence that matched marked sub-expression n,
or last if the subexpression did not participate in the match
m[n].second the end of the sequence that matched marked sub-expression n, or
last if the subexpression did not participate in the match
m[n].matched true if sub-expression n participated in the match, false
otherwise


Because regex_match only considers full matches, the same regex may give different
matches between regex_match and std::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

// Run this code


#include <iostream>
#include <string>
#include <regex>


int main()
{
// Simple regular expression matching
const std::string fnames[] = {"foo.txt", "bar.txt", "baz.dat", "zoidberg"};
const 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
const 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
const 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


Defect reports


The following behavior-changing defect reports were applied retroactively to
previously published C++ standards.


DR Applied to Behavior as published Correct behavior
basic_string rvalues were accepted, which rejected via a deleted
LWG 2329 C++11 was likely to result in dangling overload
iterators


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

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.