Podstawy wyrażeń regularnych w C++

Regular Expression Basics C



Rozważ następujące zdanie w cudzysłowie:

– Oto mój człowiek.

Ten ciąg może znajdować się w komputerze, a użytkownik może chcieć wiedzieć, czy zawiera słowo man. Jeśli zawiera słowo mężczyzna, może chcieć zmienić słowo mężczyzna na kobietę; tak, że ciąg powinien brzmieć:







– Oto moja kobieta.

Istnieje wiele innych pragnień, takich jak te ze strony użytkownika komputera; niektóre są złożone. Wyrażenie regularne, w skrócie regex, jest przedmiotem obsługi tych problemów przez komputer. C++ zawiera bibliotekę o nazwie regex. Tak więc program C++ do obsługi wyrażeń regularnych powinien zaczynać się od:



#włączać

#włączać

przy użyciu standardowej przestrzeni nazw;

W tym artykule wyjaśniono podstawy wyrażeń regularnych w C++.



Treść artykułu

Podstawy wyrażeń regularnych

Regex

Sznurek taki jak Oto mój mężczyzna. powyżej jest sekwencją docelową lub ciągiem docelowym lub po prostu celem. man, którego szukano, to wyrażenie regularne lub po prostu wyrażenie regularne.





Dopasowanie

Mówi się, że dopasowanie ma miejsce, gdy wyszukiwane słowo lub fraza zostanie odnaleziona. Po dopasowaniu może nastąpić wymiana. Na przykład po umieszczeniu mężczyzny na górze można go zastąpić kobietą.

Proste dopasowanie

Poniższy program pokazuje, jak dopasowywane jest słowo man.



#włączać

#włączać

przy użyciu standardowej przestrzeni nazw;

intGłówny()
{

wyrażenie regularne('facet');
Jeśli (regex_search(– Oto mój człowiek.,reg))
koszt<< „dopasowany” <<koniec;
w przeciwnym razie
koszt<< 'nie pasuje' <<koniec;

powrót 0;
}

Funkcja regex_search() zwraca prawdę, jeśli istnieje dopasowanie i zwraca fałsz, jeśli nie ma dopasowania. Tutaj funkcja przyjmuje dwa argumenty: pierwszy to łańcuch docelowy, a drugi to obiekt regex. Samo wyrażenie regularne to „man” w cudzysłowie. Pierwsza instrukcja funkcji main() tworzy obiekt regex. Regex to typ, a reg to obiekt regex. Wynik powyższego programu jest „dopasowany”, ponieważ „man” jest widoczny w łańcuchu docelowym. Gdyby 'man' nie było widoczne w miejscu docelowym, regex_search() zwróciłoby fałsz, a wynik byłby 'nie dopasowany'.

Dane wyjściowe następującego kodu nie są dopasowane:

wyrażenie regularne('facet');
Jeśli (regex_search(„Oto moje dzieło”.,reg))
koszt<< „dopasowany” <<koniec;
w przeciwnym razie
koszt<< 'nie pasuje' <<koniec;

Brak dopasowania, ponieważ nie można znaleźć wyrażenia regularnego „man” w całym ciągu docelowym „Oto moje dzieło”.

Wzór

Wyrażenie regularne, człowiek powyżej, jest bardzo proste. Regexes zwykle nie są takie proste. Wyrażenia regularne mają metaznaki. Metaznaki to znaki o specjalnym znaczeniu. Metaznak to postać o postaciach. Metaznaki wyrażeń regularnych C++ to:

^$ .* + ? ( ) [ ] { } |

Wyrażenie regularne, z metaznakami lub bez, to wzorzec.

Klasy postaci

Nawiasy kwadratowe

Wzór może zawierać znaki w nawiasach kwadratowych. Dzięki temu konkretna pozycja w ciągu docelowym pasowałaby do dowolnego znaku nawiasów kwadratowych. Rozważ następujące cele:

- Kot jest w pokoju.

- Nietoperz jest w pokoju.

- Szczur jest w pokoju.

Wyrażenie regularne [cbr]at byłoby zgodne z cat w pierwszym celu. Pasowałby do nietoperza w drugim celu. Pasowałby do szczura w trzecim celu. Dzieje się tak dlatego, że kot, nietoperz lub szczur zaczynają się od „c”, „b” lub „r”. Poniższy segment kodu ilustruje to:

wyrażenie regularne(„[cbr]w”);
Jeśli (regex_search(- Kot jest w pokoju.,reg))
koszt<< „dopasowany” <<koniec;
Jeśli (regex_search(- Nietoperz jest w pokoju.,reg))
koszt<< „dopasowany” <<koniec;
Jeśli (regex_search(- Szczur jest w pokoju.,reg))
koszt<< „dopasowany” <<koniec;

Dane wyjściowe to:

dopasowane

dopasowane

dopasowane

Zakres znaków

Klasa [cbr] we wzorcu [cbr] pasowałaby do kilku możliwych znaków w celu. Dopasuje „c” lub „b” lub „r” w celu. Jeśli cel nie ma żadnego z „c”, „b” lub „r”, po którym następuje at, nie byłoby dopasowania.

Niektóre możliwości, takie jak „c”, „b” lub „r”, istnieją w zakresie. Zakres cyfr od 0 do 9 ma 10 możliwości, a wzorzec dla tego to [0-9]. Zakres alfabetów pisanych małymi literami, od a do z, ma 26 możliwości, a ich wzorzec to [a-z]. Zakres wielkich alfabetów, od A do Z, ma 26 możliwości, a ich wzorzec to [A-Z]. – oficjalnie nie jest metaznakiem, ale w nawiasach kwadratowych wskazuje zakres. Tak więc, następujące tworzy dopasowanie:

Jeśli (regex_search(„ID6id”,wyrażenie regularne('[0-9]')))

koszt<< „dopasowany” <<koniec;

Zwróć uwagę, jak skonstruowano wyrażenie regularne jako drugi argument. Dopasowanie następuje między cyfrą 6 z zakresu od 0 do 9 i cyfrą 6 w celu ID6id. Powyższy kod jest odpowiednikiem:

Jeśli (regex_search(„ID6id”,wyrażenie regularne(„[0123456789]”)))

koszt<< „dopasowany” <<koniec;

Poniższy kod tworzy dopasowanie:

zwęglaćP[] = „ID6iE”;

Jeśli (regex_search(P,wyrażenie regularne('[a-z]')))

koszt<< „dopasowany” <<koniec;

Zauważ, że pierwszym argumentem jest tu zmienna łańcuchowa, a nie literał łańcuchowy. Dopasowanie jest między „i” w [a-z] i „i” w ID6iE.

Nie zapominaj, że zakres to klasa. Po prawej lub lewej stronie zakresu we wzorcu może znajdować się tekst. Poniższy kod tworzy dopasowanie:

Jeśli (regex_search(„ID2id” jest dowodem osobistym,wyrażenie regularne(„ID[0-9]id”)))

koszt<< „dopasowany” <<koniec;

Dopasowanie jest pomiędzy ID[0-9]id i ID2id. Reszta ciągu docelowego, to identyfikator, nie jest dopasowana w tej sytuacji.

Użyte w temacie wyrażenia regularnego (regexes), słowo class w rzeczywistości oznacza zestaw. Oznacza to, że jedna z postaci w zestawie ma pasować.

Uwaga: myślnik – jest metaznakiem tylko w nawiasach kwadratowych, wskazującym zakres. Nie jest to metaznak w regexie poza nawiasami kwadratowymi.

Negacja

Klasę zawierającą zakres można zanegować. Oznacza to, że żaden ze znaków w zestawie (klasie) nie powinien pasować. Jest to oznaczone metaznakiem ^ na początku wzorca klasy, tuż za otwierającym nawiasem kwadratowym. Tak więc [^0-9] oznacza dopasowanie znaku w odpowiedniej pozycji w celu, który nie jest żadnym znakiem z zakresu od 0 do 9 włącznie. Tak więc poniższy kod nie wygeneruje dopasowania:

Jeśli (regex_search('0123456789101112',wyrażenie regularne('[^ 0-9]')))

koszt<< „dopasowany” <<koniec;

w przeciwnym razie

koszt<< 'nie pasuje' <<koniec;

Cyfry z zakresu od 0 do 9 można znaleźć w dowolnej pozycji ciągu docelowego, 0123456789101112; więc nie ma dopasowania – negacja.

Poniższy kod tworzy dopasowanie:

Jeśli (regex_search(„ABCDEFGHIJ”,wyrażenie regularne('[^ 0-9]')))

koszt<< „dopasowany” <<koniec;

Nie można znaleźć żadnej cyfry w celu ABCDEFGHIJ;; więc jest dopasowanie.

[a-z] to zakres poza [^a-z]. I tak [^a-z] jest negacją [a-z].

[A-Z] to zakres poza [^A-Z]. I tak [^A-Z] jest negacją [A-Z].

Istnieją inne negacje.

Dopasowanie spacji

‘ ’ lub lub lub lub f to znak odstępu. W poniższym kodzie wyrażenie regularne pasuje do „ ” w miejscu docelowym:

Jeśli (regex_search(– Z pierwszej linii. Drugiej linii.,wyrażenie regularne(' ')))

koszt<< „dopasowany” <<koniec;

Dopasowanie dowolnego znaku odstępu

Wzorzec lub klasa pasująca do dowolnego znaku odstępu to [ f]. W poniższym kodzie pasuje „ ”:

Jeśli (regex_search('jeden dwa',wyrażenie regularne('[T F] ')))

koszt<< „dopasowany” <<koniec;

Dopasowanie dowolnego znaku niebędącego odstępem

Wzorzec lub klasa do dopasowania dowolnego znaku innego niż biały znak to [^ f]. Poniższy kod tworzy dopasowanie, ponieważ w miejscu docelowym nie ma spacji:

Jeśli (regex_search('1234abcd',wyrażenie regularne('[^T F] ')))

koszt<< „dopasowany” <<koniec;

Kropka (.) we wzorcu

Kropka (.) we wzorcu pasuje do dowolnego znaku, w tym samego siebie, z wyjątkiem w miejscu docelowym. Dopasowanie jest tworzone w następującym kodzie:

Jeśli (regex_search('1234abcd',wyrażenie regularne('.')))

koszt<< „dopasowany” <<koniec;

Brak pasujących wyników w poniższym kodzie, ponieważ celem jest .

Jeśli (regex_search(' ',wyrażenie regularne('.')))

koszt<< „dopasowany” <<koniec;

w przeciwnym razie

koszt<< 'nie pasuje' <<koniec;

Uwaga: W klasie znaków z nawiasami kwadratowymi kropka nie ma specjalnego znaczenia.

Dopasowane powtórzenia

Znak lub grupa znaków może wystąpić więcej niż raz w ciągu docelowym. Wzór może pasować do tego powtórzenia. Metaznaki, ?, *, + i {} są używane do dopasowania powtórzeń w celu. Jeśli x jest interesującym znakiem w ciągu docelowym, to metaznaki mają następujące znaczenie:

x*:oznacza dopasowanie'x' 0lub więcej razy,i.I.,dowolną ilość razy

x+:oznacza dopasowanie'x' 1lub więcej razy,i.I.,przynajmniej raz

x? :oznacza dopasowanie'x' 0lub1 czas

x{n,}:oznacza dopasowanie'x'co najmniej n lub więcej razy.Notatkaprzecinek.

x{n} :mecz'x'dokładnie n razy

x{n,m}:mecz'x'co najmniej n razy,ale nie więcej niż m razy.

Te metaznaki nazywają się kwantyfikatory.

Ilustracje

*

* dopasowuje poprzedzający znak lub poprzedzającą grupę zero lub więcej razy. o* pasuje do „o” w psie ciągu docelowego. Pasuje również do oo w książce i wyglądzie. Wyrażenie regularne, o* pasuje do boooo w The animal booooed.. Uwaga: o* pasuje do dig, gdzie „o” występuje przez zero (lub więcej) czasu.

+

Znak + dopasowuje poprzedzający znak lub poprzedzającą grupę 1 lub więcej razy. Porównaj to z zero lub więcej razy dla *. Tak więc wyrażenie regularne e+ pasuje do „e” w jedzeniu, gdzie „e” występuje tylko raz. e+ pasuje również do ee u owiec, gdzie „e” występuje więcej niż jeden raz. Uwaga: e+ nie pasuje do dig, ponieważ w dig „e” nie występuje przynajmniej raz.

?

Ten ? dopasowuje poprzedzający znak lub poprzedzającą grupę, 0 lub 1 raz (i nie więcej). Więc co? pasuje do dig, ponieważ „e” występuje w dig, czas zerowy. mi? pasuje do zestawu, ponieważ „e” występuje w zestawie, jeden raz. Uwaga: mi? nadal pasuje do owiec; chociaż są dwa „e” w owcach. Jest tu niuans – patrz dalej.

{n,}

Dopasowuje co najmniej n kolejnych powtórzeń poprzedzającego znaku lub poprzedzającej grupy. Zatem wyrażenie regularne e{2,} pasuje do dwóch „e” w docelowym owcy i trzech „e” w docelowej owcy. e{2,} nie pasuje do zbioru, ponieważ zbiór ma tylko jedno „e”.

{n}

Dopasowuje dokładnie n kolejnych powtórzeń poprzedzającego znaku lub poprzedzającej grupy. Tak więc wyrażenie regularne e{2} odpowiada dwóm „e” w docelowym, owcy. e{2} nie pasuje do zestawu, ponieważ zestaw ma tylko jedno „e”. Cóż, e{2} pasuje do dwóch 'e' w celu, baranie. Jest tu niuans – patrz dalej.

{n,m}

Dopasowuje kilka kolejnych powtórzeń poprzedzającego znaku lub poprzedzającej grupy, w dowolnym miejscu od n do m włącznie. Tak więc e{1,3} nie odpowiada niczemu w kopaniu, które nie ma „e”. Pasuje do jednego „e” w zestawie, dwóch „e” w owcach, trzech „e” w owcach i trzech „e” w owcy. W ostatnim meczu jest pewien niuans – zobacz dalej.

Dopasowana alternatywa

Rozważmy następujący ciąg docelowy w komputerze.

Gospodarstwo posiada świnie różnej wielkości.

Programista może chcieć wiedzieć, czy ten cel ma kozę, królika czy świnię. Kod wyglądałby następująco:

zwęglaćP[] = „W gospodarstwie są świnie różnej wielkości”.;

Jeśli (regex_search(P,wyrażenie regularne('koza|królik|świnia')))

koszt<< „dopasowany” <<koniec;

w przeciwnym razie

koszt<< 'nie pasuje' <<koniec;

Kod tworzy dopasowanie. Zwróć uwagę na użycie znaku alternatywy, |. Mogą być dwie, trzy, cztery i więcej opcji. C++ najpierw spróbuje dopasować pierwszą alternatywę, kozę, w każdej pozycji znaku w ciągu docelowym. Jeśli nie uda mu się z kozą, próbuje następnej alternatywy, królika. Jeśli nie uda mu się z królikiem, próbuje następnej alternatywy, świni. Jeśli świnia zawiedzie, C++ przechodzi do następnej pozycji w celu i ponownie zaczyna od pierwszej alternatywy.

W powyższym kodzie dopasowana jest świnia.

Dopasowany początek lub koniec

Początek


Jeśli ^ znajduje się na początku wyrażenia regularnego, to początkowy tekst ciągu docelowego może być dopasowany do wyrażenia regularnego. W poniższym kodzie początek celu to abc, który jest dopasowany:

Jeśli (regex_search(„abc i def”,wyrażenie regularne('^ abc')))

koszt<< „dopasowany” <<koniec;

W poniższym kodzie nie ma dopasowania:

Jeśli (regex_search(„Tak, abc i def”,wyrażenie regularne('^ abc')))

koszt<< „dopasowany” <<koniec;

w przeciwnym razie

koszt<< 'nie pasuje' <<koniec;

Tutaj abc nie znajduje się na początku celu.

Uwaga: znak daszka „^” jest metaznakiem na początku wyrażenia regularnego, pasującym do początku ciągu docelowego. Nadal jest metaznakiem na początku klasy postaci, gdzie neguje klasę.

Kończyć się

Jeśli $ znajduje się na końcu wyrażenia regularnego, to końcowy tekst ciągu docelowego może być dopasowany do wyrażenia regularnego. W poniższym kodzie koniec celu to xyz, który jest dopasowany:

Jeśli (regex_search(„uvw i xyz”,wyrażenie regularne('xyz$')))

koszt<< „dopasowany” <<koniec;

W poniższym kodzie nie ma dopasowania:

Jeśli (regex_search('uvw i xyz final',wyrażenie regularne('xyz$')))

koszt<< „dopasowany” <<koniec;

w przeciwnym razie

koszt<< 'nie pasuje' <<koniec;

Tutaj xyz nie znajduje się na końcu celu.

Grupowanie

Nawiasy mogą służyć do grupowania znaków we wzorcu. Rozważ następujące wyrażenie regularne:

„koncert (pianista)”

Grupa tutaj to pianista otoczony metaznakami ( i ). To właściwie podgrupa, podczas gdy koncert (pianista) to cała grupa. Rozważ następujące:

„(pianista jest dobry)”

Tutaj podgrupa lub podstruna jest, pianista jest dobry.

Podciągi ze wspólnymi częściami

Księgowy to osoba, która zajmuje się księgami. Wyobraź sobie bibliotekę z księgowym i półką na książki. Załóżmy, że na komputerze znajduje się jeden z następujących ciągów docelowych:

„Biblioteka ma regał, który jest podziwiany.”;

'Oto księgowy.';

'Księgowy pracuje z regałem.';

Załóżmy, że interesem programisty nie jest wiedza, które z tych zdań znajduje się w komputerze. Jednak jego zainteresowanie polega na tym, aby wiedzieć, czy regał lub księgowy jest obecny w dowolnym ciągu docelowym w komputerze. W takim przypadku jego wyrażeniem regularnym może być:

'regale|księgowym.'

Korzystanie naprzemiennie.

Zauważ, że książka, która jest wspólna dla obu słów, została napisana dwukrotnie w dwóch słowach we wzorcu. Aby uniknąć dwukrotnego wpisywania książki, wyrażenie regularne byłoby lepiej napisane jako:

'książka(półka|opiekun)'

Tutaj grupa, właściciel półki Metaznak alternacji jest nadal używany, ale nie w przypadku dwóch długich słów. Został użyty w dwóch końcowych częściach dwóch długich słów. C++ traktuje grupę jako jednostkę. Tak więc C++ będzie szukał półki lub opiekuna, który pojawia się natychmiast po książce. Dopasowywane są dane wyjściowe następującego kodu:

zwęglaćP[] = „Biblioteka ma regał, który jest podziwiany”.;

Jeśli (regex_search(P,wyrażenie regularne('książka(półka|opiekun)')))

koszt<< „dopasowany” <<koniec;

półka na książki, a nie księgowy zostały dopasowane.

Icase i wielowierszowe regex_constants

icase

W dopasowywaniu domyślnie rozróżniana jest wielkość liter. Może jednak nie uwzględniać wielkości liter. Aby to osiągnąć, użyj stałej regex::icase, jak w poniższym kodzie:

Jeśli (regex_search('Sprzężenie zwrotne',wyrażenie regularne('karmić',wyrażenie regularne::icase)))

koszt<< „dopasowany” <<koniec;

Dane wyjściowe są dopasowane. Tak więc informacja zwrotna z wielkimi literami „F” została dopasowana do kanału z małą literą „f”. regex::icase jest drugim argumentem konstruktora regex(). Bez tego oświadczenie nie dałoby dopasowania.

Wielowierszowy

Rozważ następujący kod:

zwęglaćP[] = 'linia 1 linia 2 linia 3';

Jeśli (regex_search(P,wyrażenie regularne('^. * $')))

koszt<< „dopasowany” <<koniec;

w przeciwnym razie

koszt<< 'nie pasuje' <<koniec;

Dane wyjściowe nie są dopasowane. Wyrażenie regularne ^.*$ dopasowuje łańcuch docelowy od jego początku do końca. .* oznacza dowolny znak z wyjątkiem , zero lub więcej razy. Tak więc, ze względu na znaki nowej linii ( ) w miejscu docelowym, nie było dopasowania.

Celem jest ciąg wielowierszowy. Aby '.' pasowało do znaku nowej linii, musi zostać utworzone stałe regex::multiline, drugi argument konstrukcji regex(). Poniższy kod ilustruje to:

zwęglaćP[] = 'linia 1 linia 2 linia 3';

Jeśli (regex_search(P,wyrażenie regularne('^. * $',wyrażenie regularne::wielowierszowy)))

koszt<< „dopasowany” <<koniec;

w przeciwnym razie

koszt<< 'nie pasuje' <<koniec;

Dopasowanie całego ciągu docelowego

Aby dopasować cały łańcuch docelowy, który nie ma znaku nowej linii ( ), można użyć funkcji regex_match(). Ta funkcja różni się od funkcji regex_search(). Poniższy kod ilustruje to:

zwęglaćP[] = 'pierwszy drugi trzeci';

Jeśli (regex_match(P,wyrażenie regularne('.*druga.*')))

koszt<< „dopasowany” <<koniec;

Tutaj jest mecz. Należy jednak pamiętać, że wyrażenie regularne pasuje do całego ciągu docelowego, a ciąg docelowy nie ma żadnego „ ”.

Obiekt match_results

Funkcja regex_search() może przyjmować argument pomiędzy celem a obiektem regex. Ten argument jest obiektem match_results. Za jego pomocą można poznać cały dopasowany (częściowy) ciąg i dopasowane podciągi. Ten obiekt to specjalna tablica z metodami. Typ obiektu match_results to cmatch (dla literałów napisowych).

Uzyskiwanie dopasowań

Rozważ następujący kod:

zwęglaćP[] = – Kobieta, której szukałeś!;

dopasuj m;

Jeśli (regex_search(P,m,wyrażenie regularne(„w.m.n”)))

koszt<<m[0] <<koniec;

Ciąg docelowy zawiera słowo kobieta. Wyjściem jest kobieta”, co odpowiada wyrażeniu regularnemu w.m.n. Pod indeksem zero specjalna tablica zawiera jedyne dopasowanie, którym jest kobieta.

W przypadku opcji klasy tylko pierwszy podciąg znaleziony w celu jest wysyłany do specjalnej tablicy. Poniższy kod ilustruje to:

dopasuj m;

Jeśli (regex_search(- Szczur, kot, nietoperz!,m,wyrażenie regularne('[bcr]at')))

koszt<<m[0] <<koniec;

koszt<<m[1] <<koniec;

koszt<<m[2] <<koniec;

Wynikiem jest szczur z indeksem zero. m[1] i m[2] są puste.

W przypadku alternatyw tylko pierwszy podciąg znaleziony w miejscu docelowym jest wysyłany do specjalnej tablicy. Poniższy kod ilustruje to:

Jeśli (regex_search(— Królik, koza, świnia!,m,wyrażenie regularne('koza|królik|świnia')))

koszt<<m[0] <<koniec;

koszt<<m[1] <<koniec;

koszt<<m[2] <<koniec;

Wyjście to królik z indeksu zero. m[1] i m[2] są puste.

Zgrupowania

Gdy zaangażowane są grupy, kompletny dopasowany wzorzec przechodzi do komórki zerowej tablicy specjalnej. Następny znaleziony podciąg trafia do komórki 1; następujący podciąg przechodzi do komórki 2; i tak dalej. Poniższy kod ilustruje to:

Jeśli (regex_search(„Najlepszy księgarz dzisiaj!”,m,wyrażenie regularne(„książka ((sel) (ler))”)))

koszt<<m[0] <<koniec;

koszt<<m[1] <<koniec;

koszt<<m[2] <<koniec;

koszt<<m[3] <<koniec;

Dane wyjściowe to:

księgarz

sprzedawca

komórka

czytać

Zauważ, że grupa (sprzedawca) występuje przed grupą (sel).

Pozycja meczu

Pozycja dopasowania dla każdego podciągu w tablicy cmatch może być znana. Liczenie rozpoczyna się od pierwszego znaku ciągu docelowego na pozycji zero. Poniższy kod ilustruje to:

dopasuj m;

Jeśli (regex_search(„Najlepszy księgarz dzisiaj!”,m,wyrażenie regularne(„książka ((sel) (ler))”)))

koszt<<m[0] << '->' <<m.pozycja(0) <<koniec;

koszt<<m[1] << '->' <<m.pozycja(1) <<koniec;

koszt<<m[2] << '->' <<m.pozycja(2) <<koniec;

koszt<<m[3] << '->' <<m.pozycja(3) <<koniec;

Zwróć uwagę na użycie właściwości position z indeksem komórki jako argumentu. Dane wyjściowe to:

księgarz->5

sprzedawca->9

komórka->9

czytać->12

Wyszukaj i zamień

Dopasowanie może zastąpić nowe słowo lub wyrażenie. Służy do tego funkcja regex_replace(). Jednak tym razem ciąg, w którym następuje zamiana, jest obiektem ciągu, a nie literałem ciągu. Tak więc biblioteka ciągów musi być dołączona do programu. Ilustracja:

#włączać

#włączać

#włączać

przy użyciu standardowej przestrzeni nazw;

intGłówny()
{
str= – Oto nadchodzi mój człowiek. Idzie twój człowiek.;
ciąg nowyStr=regex_replace(P,wyrażenie regularne('facet'), 'kobieta');
koszt<<nowyStr<<koniec;

powrót 0;
}

Funkcja regex_replace(), zgodnie z kodem tutaj, zastępuje wszystkie dopasowania. Pierwszym argumentem funkcji jest cel, drugim obiekt regex, a trzecim łańcuch zastępczy. Funkcja zwraca nowy ciąg, który jest celem, ale ma zamiennik. Dane wyjściowe to:

Nadchodzi moja kobieta. Idzie twoja kobieta.

Wniosek

Wyrażenie regularne używa wzorców do dopasowania podciągów w ciągu sekwencji docelowej. Wzorce mają metaznaki. Powszechnie używane funkcje dla wyrażeń regularnych C++ to: regex_search(), regex_match() i regex_replace(). Wyrażenie regularne to wzorzec w cudzysłowie podwójnym. Jednak te funkcje przyjmują obiekt regex jako argument, a nie tylko regex. Wyrażenie regularne musi zostać przekształcone w obiekt wyrażenia regularnego, zanim te funkcje będą mogły z niego korzystać.