<regex> 函数

名称 描述
regex_match 测试正则表达式是否与整个目标字符串相匹配。
regex_replace 替换匹配正则表达式。
regex_search 搜索正则表达式匹配项。
swap 交换两个 basic_regexmatch_results 对象。

regex_match

测试正则表达式是否与整个目标字符串相匹配。

// (1)
template <class BidIt, class Alloc, class Elem, class RXtraits, class Alloc2>
bool regex_match(
    BidIt first,
    Bidit last,
    match_results<BidIt, Alloc>& match,
    const basic_regex<Elem, RXtraits, Alloc2>& re,
    match_flag_type flags = match_default);

// (2)
template <class BidIt, class Elem, class RXtraits, class Alloc2>
bool regex_match(
    BidIt first,
    Bidit last,
    const basic_regex<Elem, RXtraits, Alloc2>& re,
    match_flag_type flags = match_default);

// (3)
template <class Elem, class Alloc, class RXtraits, class Alloc2>
bool regex_match(
    const Elem *ptr,
    match_results<const Elem*, Alloc>& match,
    const basic_regex<Elem, RXtraits, Alloc2>& re,
    match_flag_type flags = match_default);

// (4)
template <class Elem, class RXtraits, class Alloc2>
bool regex_match(
    const Elem *ptr,
    const basic_regex<Elem, RXtraits, Alloc2>& re,
    match_flag_type flags = match_default);

// (5)
template <class IOtraits, class IOalloc, class Alloc, class Elem, class RXtraits, class Alloc2>
bool regex_match(
    const basic_string<Elem, IOtraits, IOalloc>& str,
    match_results<typename basic_string<Elem, IOtraits, IOalloc>::const_iterator, Alloc>& match,
    const basic_regex<Elem, RXtraits, Alloc2>& re,
    match_flag_type flags = match_default);

// (6)
template <class IOtraits, class IOalloc, class Elem, class RXtraits, class Alloc2>
bool regex_match(
    const basic_string<Elem, IOtraits, IOalloc>& str,
    const basic_regex<Elem, RXtraits, Alloc2>& re,
    match_flag_type flags = match_default);

参数

BidIt
子匹配项的迭代器类型。 一般情况下,此值为 string::const_iteratorwstring::const_iteratorconst char*const wchar_t* 中的一个。

Alloc
匹配结果分配器类。

Elem
要匹配的元素的类型。 一般情况下,此值为 stringwstringchar*wchar_t*

RXtraits
元素的特征类。

Alloc2
正则表达式分配器类。

IOtraits
字符串特征类。

IOalloc
字符串分配器类。

flags
匹配标志。

first
要匹配的序列的开头。

last
要匹配的序列的结尾。

match
匹配结果。 对应于 Elem 类型:smatch 对应于 stringwsmatch 对应于 wstringcmatch 对应于 char*wcmatch 对应于 wchar_t*

ptr
指向要匹配的序列开头的指针。 如果 ptrchar*,则使用 cmatchregex。 如果 ptrwchar_t*,则使用 wcmatchwregex

re
要匹配的正则表达式。 为 stringchar* 键入 regex,或为 wstringwchar_t* 键入 wregex

str
要匹配的字符串。 对应于 Elem 类型。

备注

每个模板函数仅在整个操作数序列 str 与正则表达式参数 re 完全匹配时才返回 true。 请使用 regex_search 匹配目标序列中的子字符串,并使用 regex_iterator 查找多个匹配。 采用 match_results 对象的函数将其成员设置为反映匹配是否成功,以及如果成功,正则表达式中的各种捕获组所捕获的内容。

采用 match_results 对象的函数将其成员设置为反映匹配是否成功,以及如果成功,正则表达式中的各种捕获组所捕获的内容。

示例

// std__regex__regex_match.cpp
// compile with: /EHsc
#include <regex>
#include <iostream>

using namespace std;

int main()
{
    // (1) with char*
    // Note how const char* requires cmatch and regex
    const char *first = "abc";
    const char *last = first + strlen(first);
    cmatch narrowMatch;
    regex rx("a(b)c");

    bool found = regex_match(first, last, narrowMatch, rx);
    if (found)
        wcout << L"Regex found in abc" << endl;

    // (2) with std::wstring
    // Note how wstring requires wsmatch and wregex.
    // Note use of const iterators cbegin() and cend().
    wstring target(L"Hello");
    wsmatch wideMatch;
    wregex wrx(L"He(l+)o");

    if (regex_match(target.cbegin(), target.cend(), wideMatch, wrx))
        wcout << L"The matching text is:" << wideMatch.str() << endl;

    // (3) with std::string
    string target2("Drizzle");
    regex rx2(R"(D\w+e)"); // no double backslashes with raw string literal

    found = regex_match(target2.cbegin(), target2.cend(), rx2);
    if (found)
        wcout << L"Regex found in Drizzle" << endl;

    // (4) with wchar_t*
    const wchar_t* target3 = L"2014-04-02";
    wcmatch wideMatch2;

    // LR"(...)" is a  raw wide-string literal. Open and close parens
    // are delimiters, not string elements.
    wregex wrx2(LR"(\d{4}(-|/)\d{2}(-|/)\d{2})");
    if (regex_match(target3, wideMatch2, wrx2))
    {
        wcout << L"Matching text: " << wideMatch2.str() << endl;
    }

     return 0;
}
Regex found in abc
The matching text is: Hello
Regex found in Drizzle
The matching text is: 2014-04-02

regex_replace

替换匹配正则表达式。

template <class OutIt, class BidIt, class RXtraits, class Alloc, class Elem>
OutIt regex_replace(
    OutIt out,
    BidIt first,
    BidIt last,
    const basic_regex<Elem, RXtraits, Alloc>& re,
    const basic_string<Elem>& fmt,
    match_flag_type flags = match_default);

template <class RXtraits, class Alloc, class Elem>
basic_string<Elem> regex_replace(
    const basic_string<Elem>& str,
    const basic_regex<Elem, RXtraits, Alloc>& re,
    const basic_string<Elem>& fmt,
    match_flag_type flags = match_default);

参数

OutIt
替换内容的迭代器类型。

BidIt
子匹配项的迭代器类型。

RXtraits
元素的特征类。

Alloc
正则表达式分配器类。

Elem
要匹配的元素的类型。

flags
匹配标志。

first
要匹配的序列的开头。

fmt
替换内容的格式。

last
要匹配的序列的结尾。

out
输出迭代器。

re
要匹配的正则表达式。

str
要匹配的字符串。

备注

第一个函数构造 regex_iterator对象 iter(first, last, re, flags),然后使用该对象将其输入范围 [first, last) 拆分为一系列的子序列 T0 M0 T1 M1...TN-1 MN-1 TN,其中 Mn 是迭代器检测到的 nth 匹配项。 如果找不到任何匹配项,T0 则为整个输入范围且 N 为零。 如果 (flags & format_first_only) != 0,则仅使用第一个匹配项,T1 是匹配项后跟的全部输入文本,且 N 为 1。 对于 [0, N) 范围内的每个 i,如果 (flags & format_no_copy) == 0,则它会将 Ti 范围内的文本复制到迭代器 out。 然后它调用 m.format(out, fmt, flags),其中 m 是迭代器对象 iter 为子序列 Mi 返回的 match_results 对象。 最后,如果 (flags & format_no_copy) == 0,它将范围 TN 内的文本复制到迭代器 out。 该函数返回 out

第二个函数构造 basic_string<charT> 类型的本地变量 result 并调用 regex_replace(back_inserter(result), str.begin(), str.end(), re, fmt, flags)。 它将返回 result

示例

// std__regex__regex_replace.cpp
// compile with: /EHsc
#include <regex>
#include <iostream>

int main()
{
    char buf[20];
    const char *first = "axayaz";
    const char *last = first + strlen(first);
    std::regex rx("a");
    std::string fmt("A");
    std::regex_constants::match_flag_type fonly =
        std::regex_constants::format_first_only;

    *std::regex_replace(&buf[0], first, last, rx, fmt) = '\0';
    std::cout << "replacement == " << &buf[0] << std::endl;

    *std::regex_replace(&buf[0], first, last, rx, fmt, fonly) = '\0';
    std::cout << "replacement == " << &buf[0] << std::endl;

    std::string str("adaeaf");
    std::cout << "replacement == "
        << std::regex_replace(str, rx, fmt) << std::endl;

    std::cout << "replacement == "
        << std::regex_replace(str, rx, fmt, fonly) << std::endl;

    return (0);
}
replacement == AxAyAz
replacement == Axayaz
replacement == AdAeAf
replacement == Adaeaf

搜索正则表达式匹配项。

template <class BidIt, class Alloc, class Elem, class RXtraits, class Alloc2>
bool regex_search(
    BidIt first,
    Bidit last,
    match_results<BidIt, Alloc>& match,
    const basic_regex<Elem, RXtraits, Alloc2>& re,
    match_flag_type flags = match_default);

template <class BidIt, class Elem, class RXtraits, class Alloc2>
bool regex_search(
    BidIt first,
    Bidit last,
    const basic_regex<Elem, RXtraits, Alloc2>& re,
    match_flag_type flags = match_default);

template <class Elem, class Alloc, class RXtraits, class Alloc2>
bool regex_search(
    const Elem* ptr,
    match_results<const Elem*, Alloc>& match,
    const basic_regex<Elem, RXtraits, Alloc2>& re,
    match_flag_type flags = match_default);

template <class Elem, class RXtraits, class Alloc2>
bool regex_search(
    const Elem* ptr,
    const basic_regex<Elem, RXtraits, Alloc2>& re,
    match_flag_type flags = match_default);

template <class IOtraits, class IOalloc, class Alloc, class Elem, class RXtraits, class Alloc2>
bool regex_search(
    const basic_string<Elem, IOtraits, IOalloc>& str,
    match_results<typename basic_string<Elem, IOtraits, IOalloc>::const_iterator, Alloc>& match,
    const basic_regex<Elem, RXtraits, Alloc2>& re,
    match_flag_type flags = match_default);

template <class IOtraits, class IOalloc, class Elem, class RXtraits, class Alloc2>
bool regex_search(
    const basic_string<Elem, IOtraits, IOalloc>& str,
    const basic_regex<Elem, RXtraits, Alloc2>& re,
    match_flag_type flags = match_default);

参数

BidIt
子匹配项的迭代器类型。

Alloc
匹配结果分配器类。

Elem
要匹配的元素的类型。

RXtraits
元素的特征类。

Alloc2
正则表达式分配器类。

IOtraits
字符串特征类。

IOalloc
字符串分配器类。

flags
匹配标志。

first
要匹配的序列的开头。

last
要匹配的序列的结尾。

match
匹配结果。

ptr
指向要匹配的序列开头的指针。

re
要匹配的正则表达式。

str
要匹配的字符串。

注解

仅在其操作数序列中成功搜索到其正则表达式 re 时,每个模板函数才返回 true。 采用 match_results 对象的函数将其成员设置为反映搜索是否成功,以及如果成功,正则表达式中的各种捕获组所捕获的内容。

示例

// std__regex__regex_search.cpp
// compile with: /EHsc
#include <regex>
#include <iostream>

int main()
{
    const char *first = "abcd";
    const char *last = first + strlen(first);
    std::cmatch mr;
    std::regex rx("abc");
    std::regex_constants::match_flag_type fl =
        std::regex_constants::match_default;

    std::cout << "search(f, f+1, \"abc\") == " << std::boolalpha
        << regex_search(first, first + 1, rx, fl) << std::endl;

    std::cout << "search(f, l, \"abc\") == " << std::boolalpha
        << regex_search(first, last, mr, rx) << std::endl;
    std::cout << "  matched: \"" << mr.str() << "\"" << std::endl;

    std::cout << "search(\"a\", \"abc\") == " << std::boolalpha
        << regex_search("a", rx) << std::endl;

    std::cout << "search(\"xabcd\", \"abc\") == " << std::boolalpha
        << regex_search("xabcd", mr, rx) << std::endl;
    std::cout << "  matched: \"" << mr.str() << "\"" << std::endl;

    std::cout << "search(string, \"abc\") == " << std::boolalpha
        << regex_search(std::string("a"), rx) << std::endl;

    std::string str("abcabc");
    std::match_results<std::string::const_iterator> mr2;
    std::cout << "search(string, \"abc\") == " << std::boolalpha
        << regex_search(str, mr2, rx) << std::endl;
    std::cout << "  matched: \"" << mr2.str() << "\"" << std::endl;

    return (0);
}
search(f, f+1, "abc") == false
search(f, l, "abc") == true
  matched: "abc"
search("a", "abc") == false
search("xabcd", "abc") == true
  matched: "abc"
search(string, "abc") == false
search(string, "abc") == true
  matched: "abc"

swap

交换两个 basic_regexmatch_results 对象。

template <class Elem, class RXtraits>
void swap(
    basic_regex<Elem, RXtraits, Alloc>& left,
    basic_regex<Elem, RXtraits>& right) noexcept;

template <class Elem, class IOtraits, class BidIt, class Alloc>
void swap(
    match_results<BidIt, Alloc>& left,
    match_results<BidIt, Alloc>& right) noexcept;

参数

Elem
要匹配的元素的类型。

RXtraits
元素的特征类。

备注

模板函数在常量时间内交换各自参数的内容,并且不会引发异常。

示例

// std__regex__swap.cpp
// compile with: /EHsc
#include <regex>
#include <iostream>

int main()
{
    std::regex rx0("c(a*)|(b)");
    std::regex rx1;
    std::cmatch mr0;
    std::cmatch mr1;

    swap(rx0, rx1);
    std::regex_search("xcaaay", mr1, rx1);
    swap(mr0, mr1);

    std::csub_match sub = mr0[1];
    std::cout << "matched == " << std::boolalpha
        << sub.matched << std::endl;
    std::cout << "length == " << sub.length() << std::endl;
    std::cout << "string == " << sub << std::endl;

    return (0);
}
matched == true
length == 3
string == aaa

另请参阅

<regex>
regex_constants
regex_error
regex_iterator
<regex> 运算符
regex_token_iterator
regex_traits
<regex> typedef