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

FreeBSD Manual Pages

  
 
  

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

NAME
       std::regex_search - std::regex_search

Synopsis
	  Defined in header <regex>
	  template< class BidirIt,

	  class	Alloc, class CharT, class Traits >
	  bool	    regex_search(     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 CharT, class Alloc, class Traits >

	  bool regex_search( const CharT* str,
	  std::match_results<const		CharT*,Alloc>&		    m,
       (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 STraits, class SAlloc,

	  class	Alloc, class CharT, class Traits >
	  bool regex_search( const std::basic_string<CharT,STraits,SAlloc>& s,
	  std::match_results<
	  typename    std::basic_string<CharT,STraits,SAlloc>::const_iterator,
       (3) (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 BidirIt,

	  class	CharT, class Traits >
	  bool	   regex_search(     BidirIt	 first,	    BidirIt	 last,
       (4) (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 Traits >

	  bool	       regex_search(	     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_search( 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_search( 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	there is a match between the regular expression	e  and
       some subsequence
	  in the target	character sequence.

	  1)  Analyzes	generic	range [first,last). Match results are returned
       in m.
	  2) Analyzes a	null-terminated	string pointed to by  str.  Match  re-
       sults are returned
	  in m.
	  3) Analyzes a	string s. Match	results	are returned in	m.
	  4-6) Equivalent to (1-3), just omits the match results.
	  7)  The overload (3) is prohibited from accepting temporary strings,
       otherwise this
	  function populates match_results m with string iterators that	become
       invalid
	  immediately.

	  regex_search will successfully match any subsequence	of  the	 given
       sequence, whereas
	  std::regex_match  will  only	return	true if	the regular expression
       matches the entire
	  sequence.

Parameters
	  first, last -	a range	identifying the	target character sequence
	  str	      -	a pointer to a null-terminated	target	character  se-
       quence
	  s	      -	a string identifying target character sequence
	  e	       -  the  std::regex that should be applied to the	target
       character sequence
	  m	      -	the match results
	  flags	      -	std::regex_constants::match_flag_type governing	search
       behavior

Type requirements
	  -
	  BidirIt must meet the	requirements of	LegacyBidirectionalIterator.
	  -
	  Alloc	must meet the requirements of Allocator.

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  m[0].first
	  m.prefix().matched m.prefix().first != m.prefix().second
	  m.suffix().first   m[0].second
	  m.suffix().second  last
	  m.suffix().matched m.suffix().first != m.suffix().second
	  m[0].first	     the start of the matching sequence
	  m[0].second	     the end of	the matching sequence
	  m[0].matched	     true
	  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
	  In  order  to	 examine  all  matches	within	the  target  sequence,
       std::regex_search may be
	  called  in a loop, restarting	each time from m[0].second of the pre-
       vious call.
	  std::regex_iterator offers an	easy interface to this iteration.

Example
       // Run this code

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

	int main()
	{
	    std::string	lines[]	= {"Roses are #ff0000",
				   "violets are	#0000ff",
				   "all	of my base are belong to you"};

	    std::regex color_regex("#([a-f0-9]{2})"
				    "([a-f0-9]{2})"
				    "([a-f0-9]{2})");

	    // simple match
	    for	(const auto &line : lines) {
		std::cout << line << ":	" << std::boolalpha
			  << std::regex_search(line, color_regex) << '\n';
	    }
	    std::cout << '\n';

	    // show contents of	marked subexpressions within each match
	    std::smatch	color_match;
	    for	(const auto& line : lines) {
		if(std::regex_search(line, color_match,	color_regex)) {
		    std::cout << "matches for '" << line << "'\n";
		    std::cout << "Prefix: '" <<	color_match.prefix() <<	"'\n";
		    for	(size_t	i = 0; i < color_match.size(); ++i)
			std::cout << i << ": " << color_match[i] << '\n';
		    std::cout  <<  "Suffix:  '"	 <<  color_match.suffix()   <<
       "\'\n\n";
		}
	    }

	    // repeated	search (see also std::regex_iterator)
	    std::string	log(R"(
		Speed:	366
		Mass:	35
		Speed:	378
		Mass:	32
		Speed:	400
		Mass:	30)");
	    std::regex r(R"(Speed:\t\d*)");
	    std::smatch	sm;
	    while(regex_search(log, sm,	r))
	    {
		std::cout << sm.str() << '\n';
		log = sm.suffix();
	    }

	    // C-style string demo
	    std::cmatch	cm;
	    if(std::regex_search("this is a test", cm, std::regex("test")))
		std::cout << "\nFound "	<< cm[0] << " at position " << cm.pre-
       fix().length();
	}

Output:
	Roses are #ff0000: true
	violets	are #0000ff: true
	all of my base are belong to you: false

	matches	for 'Roses are #ff0000'
	Prefix:	'Roses are '
	0: #ff0000
	1: ff
	2: 00
	3: 00
	Suffix:	''

	matches	for 'violets are #0000ff'
	Prefix:	'violets are '
	0: #0000ff
	1: 00
	2: 00
	3: ff
	Suffix:	''

	Speed:	366
	Speed:	378
	Speed:	400

	Found test at position 10

	 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_match	attempts to match a regular expression	to  an	entire
       character sequence
	  (C++11)	(function template)

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

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

home | help