Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::regex_match(3)	      C++ Standard Libary	   std::regex_match(3)

NAME
       std::regex_match	- std::regex_match

Synopsis
	  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  ef-
       fect 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 expres-
       sion to an entire
	  character  sequence,	whereas	 std::regex_search  will  successfully
       match subsequences.

Parameters
	  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  per-
       formed

Type requirements
	  -
	  BidirIt must meet the	requirements of	LegacyBidirectionalIterator.

Return value
	  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

Notes
	  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]  con-
       tains "Get"
	std::regex_match  ("GetValue", m, re);	// returns true, and m[0] con-
       tains "GetValue"
	std::regex_search("GetValues", m, re); // returns true,	and m[0]  con-
       tains "Get"
	std::regex_match ("GetValues", m, re); // returns false

Example
       // 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';
		    }
		}
	    }
	}

Output:
	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 retroac-
       tively to
	  previously published C++ standards.

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

See also
	  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)

http://cppreference.com		  2022.07.31		   std::regex_match(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::regex_match&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help