<regex>
– funkce
Název | Popis |
---|---|
regex_match |
Testuje, zda regulární výraz odpovídá celému cílovému řetězci. |
regex_replace |
Nahradí odpovídající regulární výrazy. |
regex_search |
Vyhledá shodu regulárního výrazu. |
swap |
Prohodí dva basic_regex objekty nebo match_results objekty. |
regex_match
Testuje, zda regulární výraz odpovídá celému cílovému řetězci.
// (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);
Parametry
BidIt
Typ iterátoru pro podsložky. U běžných případů je to jeden z string::const_iterator
, const char*
wstring::const_iterator
nebo const wchar_t*
.
Alloc
Shoda výsledků alokátoru – třída.
Elem
Typ prvků, které se mají spárovat. V běžných případech se jedná string
o , char*
wstring
nebo wchar_t*
.
RXtraits
Třída vlastností prvků.
Alloc2
Třída alokátoru regulárního výrazu.
IOtraits
Třída řetězcových vlastností.
IOalloc
Třída alokátoru řetězců.
flags
Příznaky pro shody.
first
Začátek sekvence, která se má shodovat.
last
Konec sekvence, která se má shodovat.
match
Výsledky shody. Odpovídá typu Elem: smatch
pro string
, wsmatch
pro wstring
, cmatch
pro char*
nebo wcmatch
pro wchar_t*
.
ptr
Ukazatel na začátek sekvence, která se má shodovat. Pokud ptr
je char*
, pak použijte cmatch
a regex
. Pokud ptr
je wchar_t*
pak použit wcmatch
a wregex
.
re
Regulární výraz, který se má shodovat. Zadejte regex
pro string
a char*
, nebo wregex
pro wstring
a wchar_t*
.
str
Řetězec, který se má shodovat. Odpovídá typu .Elem
Poznámky
Každá funkce šablony vrátí hodnotu true pouze v případě, že celá sekvence str
operandu přesně odpovídá argumentu regulárního výrazu re
. Slouží regex_search
k porovnávání podřetětědce v cílové sekvenci a regex_iterator
k vyhledání více shod. Funkce, které přebírají match_results
objekt nastaveny jeho členy, aby odrážely, zda shoda proběhla úspěšně, a pokud ano, jaké různé skupiny zachycení v regulárním výrazu byly zachyceny.
Funkce, které přebírají match_results
objekt nastaveny jeho členy, aby odrážely, zda shoda proběhla úspěšně, a pokud ano, jaké různé skupiny zachycení v regulárním výrazu byly zachyceny.
Příklad
// 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
Nahradí odpovídající regulární výrazy.
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);
Parametry
OutIt
Typ iterátoru pro nahrazení.
BidIt
Typ iterátoru pro podsložky.
RXtraits
Třída vlastností prvků.
Alloc
Třída alokátoru regulárního výrazu.
Elem
Typ prvků, které se mají spárovat.
flags
Příznaky pro shody.
first
Začátek sekvence, která se má shodovat.
fmt
Formát pro nahrazení.
last
Konec sekvence, která se má shodovat.
out
Výstupní iterátor.
re
Regulární výraz, který se má shodovat.
str
Řetězec, který se má shodovat.
Poznámky
První funkce vytvoří objekt Třídy a použije ho k rozdělení vstupního rozsahu [first, last)
do řady dílčích T0 M0 T1 M1...TN-1 MN-1 TN
sekvencí , kde Mn
je nth shoda zjištěná iterátorem. iter(first, last, re, flags)
regex_iterator
Pokud se nenajde žádná shoda, T0
je celá vstupní oblast a N
je nulová. Pokud (flags & format_first_only) != 0
se použije pouze první shoda, T1
je veškerý vstupní text, který následuje za shodou, a N
je 1. Pro každý i
v oblasti [0, N)
, pokud (flags & format_no_copy) == 0
zkopíruje text v oblasti Ti
do iterátoru out
. Potom volá m.format(out, fmt, flags)
, kde m
je match_results
objekt vrácen objektem iterátoru iter
pro dílčí sekvenci Mi
. A nakonec, pokud (flags & format_no_copy) == 0
zkopíruje text v oblasti TN
do iterátoru out
. Funkce vrátí out
.
Druhá funkce vytvoří místní proměnnou result
typu basic_string<charT>
a volání regex_replace(back_inserter(result), str.begin(), str.end(), re, fmt, flags)
. result
Vrátí .
Příklad
// 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
regex_search
Vyhledá shodu regulárního výrazu.
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);
Parametry
BidIt
Typ iterátoru pro podsložky.
Alloc
Shoda výsledků alokátoru – třída.
Elem
Typ prvků, které se mají spárovat.
RXtraits
Třída vlastností prvků.
Alloc2
Třída alokátoru regulárního výrazu.
IOtraits
Třída řetězcových vlastností.
IOalloc
Třída alokátoru řetězců.
flags
Příznaky pro shody.
first
Začátek sekvence, která se má shodovat.
last
Konec sekvence, která se má shodovat.
match
Výsledky shody.
ptr
Ukazatel na začátek sekvence, která se má shodovat.
re
Regulární výraz, který se má shodovat.
str
Řetězec, který se má shodovat.
Poznámky
Každá funkce šablony vrátí hodnotu true pouze v případě, že hledání argumentu re
regulárního výrazu v pořadí operandů proběhne úspěšně. Funkce, které přebírají match_results
objekt, nastaví jeho členy tak, aby odrážely, zda hledání proběhlo úspěšně, a pokud ano, jaké různé skupiny zachycení v regulárním výrazu byly zachyceny.
Příklad
// 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
Prohodí dva basic_regex
objekty nebo match_results
objekty.
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;
Parametry
Elem
Typ prvků, které se mají spárovat.
RXtraits
Třída vlastností prvků.
Poznámky
Funkce šablony prohodí obsah příslušných argumentů v konstantním čase a nevyvolají výjimky.
Příklad
// 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
Viz také
<regex>
regex_constants
Třída
regex_error
Třída
regex_iterator
Třída
<regex>
– operátory
regex_token_iterator
Třída
regex_traits
Třída
<regex>
– definice Typedef