Поделиться через


<regex>Функции

Имя Описание
regex_match Проверяет, совпадает ли регулярное выражение со всей целевой строкой.
regex_replace Заменяет соответствующие регулярные выражения.
regex_search Поиск соответствия регулярному выражению.
swap Переключение двух basic_regex или match_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_iterator, wstring::const_iteratorconst char* или const wchar_t*.

Alloc
Класс распределителя результатов соответствия.

Elem
Тип элементов для обеспечения соответствия. Для распространенных случаев это string, char* wstringили wchar_t*.

RXtraits
Класс характеристик для элементов.

Alloc2
Класс распределителя регулярного выражения.

IOtraits
Класс характеристик строки.

IOalloc
Класс распределителя строк.

flags
Флаги для соответствий.

first
Начало последовательности для сопоставления.

last
Конец последовательности для сопоставления.

match
Результаты сопоставления. Соответствует типу Elem: smatch for , for string, cmatch wsmatch for char* wstringили wcmatch for wchar_t*.

ptr
Указатель на начало последовательности для сопоставления. Если ptr есть char*, используйте cmatch и regex. Если ptr используется wchar_t* wcmatch и wregex.

re
Регулярное выражение для сравнения. Тип regex для string и char*(илиwregex)wstring wchar_t*

str
Сопоставляемая строка. Соответствует типу Elem.

Замечания

Каждая функция шаблона возвращает значение true, только если вся последовательность операндов str точно соответствует аргументу re регулярного выражения. Используется 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) class и использует его для разделения входного диапазона [first, last) на ряд подсезонT0 M0 T1 M1...TN-1 MN-1 TN, где Mn находится nth-совпадение, обнаруженное итератором. Если совпадения не найдены, T0 — это весь входной диапазон, а N равно нулю. Если (flags & format_first_only) != 0, используется только первое соответствие, T1 — это весь входной текст, который следует за соответствием, а N равно 1. Для каждого i в диапазоне [0, N), если (flags & format_no_copy) == 0, то он копирует текст в диапазоне Ti в итератор out. Затем он вызывает m.format(out, fmt, flags), где m — это объект match_results, возвращаемый объектом итератора iter для подпоследовательности Mi. В завершение, если (flags & format_no_copy) == 0, он копирует текст в диапазоне TN в итератор out. Функция возвращает out.

Вторая функция создает локальную переменную result типа basic_string<charT> и вызывает 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
Сопоставляемая строка.

Замечания

Каждая функция-шаблон возвращает true, только если поиск ее аргумента — регулярного выражения re в ее последовательности операндов завершается успешно. Функции, принимающие объект 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_regex или match_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>