函数模板
<regex>

std::regex_search

C字符串 (1)
template <class charT, class traits>  bool regex_search (const charT* s, const basic_regex<charT,traits>& rgx,          regex_constants::match_flag_type flags = regex_constants::match_default);
字符串 (2)
template <class ST, class SA, char charT, class traits>  bool regex_search (const basic_string<charT,ST,SA>& s,          const basic_regex<charT,traits>& rgx,          regex_constants::match_flag_type flags = regex_constants::match_default);
范围 (3)
template <class BidirectionalIterator, class charT, class traits>  bool regex_search (BidirectionalIterator first, BidirectionalIterator last,          const basic_regex<charT,traits>& rgx,          regex_constants::match_flag_type flags = regex_constants::match_default);
带 match_results (4,5,6)
template <class charT, class Alloc, class traits>  bool regex_search (const charT* s, match_results<const charT*, Alloc>& m,          const basic_regex<charT,traits>& rgx,          regex_constants::match_flag_type flags = regex_constants::match_default);template <class ST, class SA, class Alloc, class charT, class traits>  bool regex_search (const basic_string<charT,ST,SA>& s,          match_results<typename basic_string<charT,ST,SA>::const_iterator,Alloc>& m,          const basic_regex<charT,traits>& rgx,          regex_constants::match_flag_type flags = regex_constants::match_default);template <class BidirectionalIterator, class Alloc, class charT, class traits>  bool regex_search (BidirectionalIterator first, BidirectionalIterator last,          match_results<BidirectionalIterator, Alloc>& m,          const basic_regex<charT,traits>& rgx,          regex_constants::match_flag_type flags = regex_constants::match_default);
C字符串 (1)
template <class charT, class traits>  bool regex_search (const charT* s, const basic_regex<charT,traits>& rgx,          regex_constants::match_flag_type flags = regex_constants::match_default);
字符串 (2)
template <class ST, class SA, char charT, class traits>  bool regex_search (const basic_string<charT,ST,SA>& s,          const basic_regex<charT,traits>& rgx,          regex_constants::match_flag_type flags = regex_constants::match_default);
范围 (3)
template <class BidirectionalIterator, class charT, class traits>  bool regex_search (BidirectionalIterator first, BidirectionalIterator last,          const basic_regex<charT,traits>& rgx,          regex_constants::match_flag_type flags = regex_constants::match_default);
带 match_results (4,5,6)
template <class charT, class Alloc, class traits>  bool regex_search (const charT* s, match_results<const charT*, Alloc>& m,          const basic_regex<charT,traits>& rgx,          regex_constants::match_flag_type flags = regex_constants::match_default);template <class ST, class SA, class Alloc, class charT, class traits>  bool regex_search (const basic_string<charT,ST,SA>& s,          match_results<typename basic_string<charT,ST,SA>::const_iterator,Alloc>& m,          const basic_regex<charT,traits>& rgx,          regex_constants::match_flag_type flags = regex_constants::match_default);template <class BidirectionalIterator, class Alloc, class charT, class traits>  bool regex_search (BidirectionalIterator first, BidirectionalIterator last,          match_results<BidirectionalIterator, Alloc>& m,          const basic_regex<charT,traits>& rgx,          regex_constants::match_flag_type flags = regex_constants::match_default);
移动字符串(已删除)(7)
template <class ST, class SA, class Alloc, class charT, class traits>  bool regex_search (const basic_string<charT,ST,SA>&&,          match_results<typename basic_string<charT,ST,SA>::const_iterator,Alloc>&,          const basic_regex<charT,traits>&,          regex_constants::match_flag_type=regex_constants::match_default) = delete;
搜索序列
返回“目标序列”(主体)中的某个子序列是否匹配正则表达式“rgx”(模式)。“目标序列”是“s”或介于“first”和“last”之间的字符序列,具体取决于所使用的版本。

版本4、5和6与版本1、2和3分别相同,只是它们接受一个match_results类型的对象作为参数,该对象会被匹配结果信息填充。

可选参数“flags”允许指定匹配表达式的方式。

此函数返回true如果表达式在目标序列的任何位置找到,即使序列在匹配之前或之后包含更多未匹配的字符。对于返回true仅当整个序列匹配时,请参阅regex_match。

参数

s
一个带有目标序列(主体)的字符串,用于搜索正则表达式的匹配。
rgx
一个basic_regex对象(模式)进行匹配。
标志
用于控制“rgx”如何匹配的标志。
可以将这些常量中的一个或多个组合(使用按位或运算符“|”)形成一个类型为regex_constants::match_flag_type:
flag*对匹配的影响说明
match_default默认默认匹配行为。
此常量的值为零**。
match_not_bol非行首第一个字符不被视为“行首”("^"不匹配)。
match_not_eol非行尾最后一个字符不被视为“行尾”("$"不匹配)。
match_not_bow非词首转义序列"\b"不匹配为“词首”。
match_not_eow非词尾转义序列"\b"不匹配为“词尾”。
match_any任意匹配如果可能存在多个匹配,则接受任意一个匹配。
match_not_null非空空序列不匹配。
match_continuous连续表达式必须匹配从第一个字符开始的子序列。
子序列必须从第一个字符开始才能匹配。
match_prev_avail前一个可用第一个字符之前存在一个或多个字符。(match_not_bolmatch_not_bow被忽略)
format_default默认与...相同match_default.
此常量的值为零**。
format_sed此函数忽略。
有关更多信息,请参阅regex_constants。
format_no_copy
format_first_only
* 这些位掩码标志名称在std::regex_constants命名空间可用(有关更多详细信息,请参阅regex_constants)。
** 值为零的常量如果在设置了其他标志时会被忽略。
match_flag_type是可用在std::regex_constants命名空间内定义。
first, last
双向迭代器,指向用于作为搜索目标序列的字符范围的起始和结束位置。使用的范围是[first,last),其中包括firstlast之间的所有字符,包括first指向的字符,但不包括last指向的字符。
函数模板类型可以是任何指向字符的双向迭代器
m
一个match_results类型的对象(例如cmatch或smatch),此函数用它来填充有关匹配结果和任何找到的子匹配的信息。
match_results对象的类型应使用合适的迭代器类型进行实例化,以便遍历字符序列s(或begin和end之间的字符)。

返回值

true如果“rgx”与目标序列中的子序列匹配。false否则为 false。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// regex_search example
#include <iostream>
#include <string>
#include <regex>

int main ()
{
  std::string s ("this subject has a submarine as a subsequence");
  std::smatch m;
  std::regex e ("\\b(sub)([^ ]*)");   // matches words beginning by "sub"

  std::cout << "Target sequence: " << s << std::endl;
  std::cout << "Regular expression: /\\b(sub)([^ ]*)/" << std::endl;
  std::cout << "The following matches and submatches were found:" << std::endl;

  while (std::regex_search (s,m,e)) {
    for (auto x:m) std::cout << x << " ";
    std::cout << std::endl;
    s = m.suffix().str();
  }

  return 0;
}

输出
Target sequence: this subject has a submarine as subsequence
Regular expression: /\b(sub)([^ ]*)/
The following matches and submatches were found:
subject sub ject
submarine sub marine
subsequence sub sequence


另见