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
       (since
	  std::basic_string<CharT,STraits,SAlloc>::const_iterator,
       (3) C++11)
				 Alloc
			     >&	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
       (since
	  std::basic_string<CharT,STraits,SAlloc>::const_iterator,
       (7) C++11)
				 Alloc
			     >&,
			     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 <cstddef>
	#include <iostream>
	#include <regex>
	#include <string>

	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	(std::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*)");
	    for	(std::smatch sm; 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.prefix().length() << '\n';
	}

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		  2024.06.10		  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.1.quarterly>

home | help