C ++

Základy regulárnych výrazov v C ++

Základy regulárnych výrazov v C ++
Zvážte nasledujúcu vetu v úvodzovkách:

„Tu je môj muž.„

Tento reťazec môže byť vo vnútri počítača a používateľ môže chcieť vedieť, či má slovo „man“. Ak má slovo muž, potom môže chcieť zmeniť slovo „muž“ na „žena“; aby reťazec mal čítať:

„Tu je moja žena.„

Existuje mnoho ďalších želaní, ako sú tieto, od používateľa počítača; niektoré sú zložité. Regulárny výraz, skrátený, regulárny výraz, je predmetom riešenia týchto problémov počítačom. C ++ sa dodáva s knižnicou s názvom regex. Program v C ++ na spracovanie regulárneho výrazu by mal preto začínať:

#include
#include
pomocou namespace std;

Tento článok vysvetľuje základy regulárnych výrazov v jazyku C++.

Obsah článku

  • Základy regulárneho výrazu
  • Vzor
  • Triedy znakov
  • Zodpovedajúce medzery
  • Perióda (.) vo vzore
  • Zhodné opakovania
  • Zhodné striedanie
  • Začiatok alebo koniec zápasu
  • Zoskupenie
  • Iseca a viacriadkové regulárne regulárne výrazy
  • Zhoda celého cieľa
  • Objekt match_results
  • Pozícia zápasu
  • Vyhľadať a nahradiť
  • Záver

Základy regulárneho výrazu

Regulárny výraz

Reťazec ako „Tu je môj muž.”Vyššie je cieľová sekvencia alebo cieľový reťazec alebo jednoducho cieľ. „Man“, ktorý bol hľadaný, je regulárny výraz alebo jednoducho regulárny výraz.

Zodpovedajúce

K priraďovaniu údajne dôjde, keď sa nachádza slovo alebo fráza, ktoré sa hľadajú. Po zhode môže prebehnúť výmena. Napríklad potom, čo sa „muž“ nachádza vyššie, môže byť nahradený výrazom „žena“.

Jednoduché priraďovanie

Nasledujúci program ukazuje, ako sa slovo „muž“ zhoduje.

#include
#include
pomocou namespace std;
int main ()

regex reg ("muž");
if (regex_search ("Tu je môj muž.".", reg))
cout << "matched" << endl;
inak
cout << "not matched" << endl;
návrat 0;

Funkcia regex_search () vráti true, ak existuje zhoda, a vráti false, ak nedôjde k zhode. Tu funkcia prijíma dva argumenty: prvý je cieľový reťazec a druhý je objekt regulárneho výrazu. Samotný regulárny výraz je v dvojitých úvodzovkách „človek“. Prvý príkaz vo funkcii main () tvorí objekt regulárneho výrazu. Regulárny výraz je typ a reg je objekt regulárneho výrazu. Výstup vyššie uvedeného programu je „zhodný“, pretože v cieľovom reťazci je vidieť „človek“. Ak by „man“ nebol viditeľný v cieli, regex_search () by vrátil hodnotu false a výstup by sa „nezhodoval“.

Výstup nasledujúceho kódu je „nezodpovedá“:

regex reg ("muž");
if (regex_search ("Tu je moja tvorba.", reg))
cout << "matched" << endl;
inak
cout << "not matched" << endl;

Nezhoduje sa, pretože regulárny výraz „man“ sa nenašiel v celom cieľovom reťazci: „Toto je moja tvorba.„

Vzor

Regulárny výraz „muž“ vyššie je veľmi jednoduchý. Regulárne výrazy zvyčajne nie sú také jednoduché. Regulárne výrazy majú metaznaky. Metaznaky sú znaky so zvláštnym významom. Metaznak je postava o znakoch. Metaznaky regulárneho výrazu C ++ sú:

^ $ \ . * + ? () [] |

Regulárny výraz, s metaznakmi alebo bez nich, je vzor.

Triedy znakov

Hranaté zátvorky

Vzor môže mať znaky v hranatých zátvorkách. S týmto by sa konkrétna pozícia v cieľovom reťazci zhodovala s ľubovoľnými znakmi v hranatých zátvorkách. Zvážte nasledujúce ciele:

„Mačka je v miestnosti.„
„Netopier je v miestnosti.„
„Potkan je v miestnosti.„

Regulárny výraz, [cbr] at by sa zhodoval s mačkou v prvom terči. Zhodovalo by sa to s pálkou v druhom terči. V treťom terči by sa to zhodovalo s potkanom. Je to preto, že „mačka“ alebo „netopier“ alebo „potkan“ začína na „c“ alebo „b“ alebo „r“. Ilustruje to nasledujúci segment kódu:

regulárny výraz („[cbr] at“);
if (regex_search ("Mačka je v miestnosti.", reg))
cout << "matched" << endl;
if (regex_search ("Netopier je v miestnosti.", reg))
cout << "matched" << endl;
if (regex_search ("Krysa je v miestnosti.".", reg))
cout << "matched" << endl;

Výstup je:

uzavreté
uzavreté
uzavreté

Rozsah znakov

Trieda [cbr] vo vzore [cbr] by zodpovedala niekoľkým možným znakom v cieli. Zhoduje sa s „c“ alebo „b“ alebo „r“ v cieli. Ak terč nemá žiadne z „c“ alebo „b“ alebo „r“, za ktorými nasleduje „at“, nedôjde k zhode.

V rozsahu existujú niektoré možnosti ako „c“ alebo „b“ alebo „r“. Rozsah číslic od 0 do 9 má 10 možností a vzor pre to je [0-9]. Rozsah malých písmen od a do z má 26 možností a vzor pre ne je [a-z]. Rozsah veľkých písmen od A do Z má 26 možností a vzor pre ne je [A-Z]. - nie je oficiálne metaznakom, ale v hranatých zátvorkách by to znamenalo rozsah. Nasledujúce vytvorí zhodu:

if (regex_search ("ID6id", regex ("[0-9]")))
cout << "matched" << endl;

Všimnite si, ako bol regex skonštruovaný ako druhý argument. Zhoda nastáva medzi číslicou, 6 v rozsahu, 0 až 9, a 6 v terči, „ID6id“. Vyššie uvedený kód je ekvivalentný s:

if (regex_search ("ID6id", regex ("[0123456789]"))))
cout << "matched" << endl;

Nasledujúci kód vytvorí zhodu:

char str [] = "ID6iE";
if (regex_search (str, regex ("[a-z]")))
cout << "matched" << endl;

Všimnite si, že prvý argument tu je premenná reťazca a nie reťazcový literál. Zhoda je medzi „i“ v [a-z] a „i“ v „ID6iE“.

Nezabudnite, že rozsah je trieda. Vo vzore môže byť text napravo od rozsahu alebo naľavo od rozsahu. Nasledujúci kód vytvorí zhodu:

if (regex_search ("ID2id je ID ", regex (" ID [0-9] id ")))
cout << "matched" << endl;

Zhoda je medzi „ID [0-9] id“ a „ID2id“. Zvyšok cieľového reťazca „je ID“ sa v tejto situácii nezhoduje.

Ako sa používa v predmete regulárneho výrazu (regulárne výrazy), slovo trieda v skutočnosti znamená množinu. To znamená, že jedna z postáv v súprave sa má zhodovať.

Poznámka: Pomlčka - je metaznak iba v hranatých zátvorkách, čo naznačuje rozsah. Nejde o metaznak v regexe, mimo hranatých zátvoriek.

Negácia

Triedu zahŕňajúcu rozsah je možné negovať. To znamená, že by sa nemali zhodovať žiadne znaky v množine (triede). Toto je označené ^ metaznakom na začiatku vzoru triedy, hneď za úvodnou hranatou zátvorkou. [^ 0-9] znamená, že sa znak zhoduje na príslušnej pozícii v cieli, čo nie je žiadny znak v rozsahu od 0 do 9 vrátane. Nasledujúci kód teda nevytvorí zhodu:

if (regex_search ("0123456789101112", regex ("[^ 0-9]"))))
cout << "matched" << endl;
inak
cout << "not matched" << endl;

Číslicu v rozmedzí od 0 do 9 nájdete na ktorejkoľvek z pozícií cieľového reťazca „0123456789101112“; takže neexistuje zhoda - negácia.

Nasledujúci kód vytvorí zhodu:

if (regex_search ("ABCDEFGHIJ", regex ("[^ 0-9]"))))
cout << "matched" << endl;

V cieli „ABCDEFGHIJ“ sa nenašla žiadna číslica; takže je zhoda.

[a-z] je rozsah mimo [^ a-z]. A tak [^ a-z] je negácia [a-z].

[A-Z] je rozsah mimo [^ A-Z]. A tak [^ A-Z] je negácia [A-Z].

Existujú ďalšie negácie.

Zodpovedajúce medzery

"alebo \ t alebo \ r alebo \ n alebo \ f je prázdny znak. V nasledujúcom kóde sa regulárny výraz „\ n“ zhoduje s „\ n“ v cieli:

if (regex_search ("Z prvého riadku.\ r \ nriadok dva.", regulárny výraz (" \ n ")))
cout << "matched" << endl;

Zhoduje sa s ľubovoľnou medzerou

Vzor alebo trieda, ktorá sa zhoduje s ľubovoľným znakom prázdneho miesta, je [\ t \ r \ n \ f]. V nasledujúcom kóde je zhoda „:

if (regex_search ("jedna dvojka", regex ("[\ t \ r \ n \ f]"))))
cout << "matched" << endl;

Zhoduje sa s ľubovoľným znakom iného ako prázdneho miesta

Vzor alebo trieda, ktorá sa zhoduje s akýmkoľvek znakom iného ako prázdneho miesta, je [^ \ t \ r \ n \ f]. Nasledujúci kód vytvorí zhodu, pretože v cieli nie sú medzery:

if (regex_search ("1234abcd", regex ("[^ \ t \ r \ n \ f]"))))
cout << "matched" << endl;

Perióda (.) vo vzore

Perióda (.) vo vzore sa zhoduje s ľubovoľným znakom vrátane jeho samotného, ​​okrem \ n v cieli. Zhoda sa vytvorí v nasledujúcom kóde:

if (regex_search ("1234abcd", regex (".")))
cout << "matched" << endl;

V nasledujúcom kóde nie sú výsledky zodpovedajúce, pretože cieľ je „\ n“.

if (regex_search ("\ n", regex (".")))
cout << "matched" << endl;
inak
cout << "not matched" << endl;

Poznámka: Vo vnútri triedy znakov so hranatými zátvorkami nemá bodka žiadny zvláštny význam.

Zhodné opakovania

Znak alebo skupina znakov sa v cieľovom reťazci môže vyskytnúť viackrát. Tomuto opakovaniu môže zodpovedať vzor. Metaznaky, ?, *, + a sa používajú na porovnanie opakovania v cieli. Ak je znakom záujmu v cieľovom reťazci x, potom majú metaznaky nasledujúci význam:

x *: znamená zhodu 'x' 0 alebo viackrát, t.j.e., ľubovoľný počet opakovaní
x +: znamená zhodu 'x' 1 alebo viackrát, t.j.e., aspoň raz
X? : znamená zhodu 'x' 0 alebo 1 krát
x n,: znamená zhodu 'x' najmenej n alebo viackrát. Všimnite si čiarku.
x n: zhoda 'x' presne n-krát
x n, m: zhoda 'x' najmenej n-krát, ale nie viac ako m-krát.

Tieto metaznaky sa nazývajú kvantifikátory.

Ilustrácie

*

* Sa zhoduje s predchádzajúcim znakom alebo predchádzajúcou skupinou, nula alebo viackrát. „O *“ sa zhoduje s „o“ v „psovi“ cieľového reťazca. Zhoduje sa tiež s výrazom „oo“ v „knihe“ a „hľadanie“. Regulárny výraz „o *“ sa zhoduje s výrazom „boooo“ v stĺpci „The animal booooed“.“. Poznámka: „o *“ sa zhoduje s „dig“, kde „o“ nastáva nula (alebo viac) času.

+

Znamienko + sa zhoduje s predchádzajúcim znakom alebo predchádzajúcou skupinou 1 alebo viackrát. Porovnajte to s nulou alebo viackrát za *. Takže regulárny výraz „e +“ sa zhoduje s „e“ v „jedení“, kde sa „e“ vyskytne jedenkrát. „E +“ sa tiež zhoduje s „ee“ v „ovciach“, kde sa „e“ vyskytuje viackrát. Poznámka: „e +“ sa nebude zhodovať s „dig“, pretože v „dig“ sa „e“ nevyskytuje najmenej raz.

?

The ? zodpovedá predchádzajúcemu znaku alebo predchádzajúcej skupine, 0 alebo 1 krát (a nie viac). Takže „napr?”Sa zhoduje s„ dig “, pretože„ e “sa vyskytuje v„ dig “, nulový čas. „E?”Sa zhoduje s“ set ”, pretože„ e “sa vyskytuje v„ set “, raz. Poznámka: „napr?”Stále sa zhoduje s“ ovcou ”; aj keď v „ovciach“ sú dve. Existuje tu jedna nuance - pozri neskôr.

n,

To zodpovedá najmenej n po sebe idúcich opakovaní predchádzajúceho znaku alebo predchádzajúcej skupiny. Takže regulárny výraz „e 2,“ zodpovedá dvom „e“ v cieli „ovce“ a trom „e“ v terči „ovce“. „E 2,“ sa nezhoduje s „set“, pretože „set“ má iba jedno „e“.

n

To zodpovedá presne n po sebe idúcich opakovaní predchádzajúceho znaku alebo predchádzajúcej skupiny. Takže regulárny výraz „e 2“ zodpovedá dvom „e“ v cieľovom slove „ovce“. „E 2“ sa nezhoduje s „set“, pretože „set“ má iba jedno „e“. „E 2“ sa zhoduje s dvoma v cieľovom poli, „ovce“. Existuje tu jedna nuance - pozri neskôr.

n, m

Zhoduje sa to s niekoľkými po sebe nasledujúcimi opakovaniami predchádzajúceho znaku alebo predchádzajúcej skupiny kdekoľvek od n do m vrátane. „E 1,3“ teda nezodpovedá ničomu v „dig“, ktorý nemá „e“. Zodpovedá jednému „e“ v „súbore“, dvom „e“ v „ovci“, trom „e“ v „ovci“ a trom „e“ v „sheeeep“. V poslednom zápase je nuansa - pozri neskôr.

Zhodné striedanie

Zvážte nasledujúci cieľový reťazec v počítači.

"Na farme sa nachádzajú ošípané rôznych veľkostí.".“

Programátor môže chcieť vedieť, či má tento cieľ „kozu“, „králika“ alebo „prasa“. Kód bude vyzerať takto:

char str [] = "Na farme sa nachádzajú ošípané rôznych veľkostí.";
if (regex_search (str, regex ("koza | králik | prasa"))))
cout << "matched" << endl;
inak
cout << "not matched" << endl;

Kód vytvorí zhodu. Všimnite si použitie znaku alternácie,. Môžu existovať dve, tri, štyri a viac možností. C ++ sa najskôr pokúsi nájsť zhodu s prvou alternatívou, „kozou“, na každej pozícii znaku v cieľovom reťazci. Ak neuspeje s „kozou“, vyskúša ďalšiu alternatívu, „zajačiu“. Ak s „králikom“ neuspeje, vyskúša ďalšiu alternatívu, „prasa“. Ak „prasa“ zlyhá, potom C ++ prejde na ďalšiu pozíciu v cieli a znova začne s prvou alternatívou.

Vo vyššie uvedenom kóde je zhoda „prasa“.

Začiatok alebo koniec zápasu

Začiatok


Ak je ^ na začiatku regulárneho výrazu, potom sa počiatočný text cieľového reťazca môže zhodovať s regulárnym výrazom. V nasledujúcom kóde je začiatok cieľa „abc“, ktoré sa zhoduje:

if (regex_search ("abc and def", regex ("^ abc")))
cout << "matched" << endl;

V nasledujúcom kóde sa neuskutočňuje žiadna zhoda:

if (regex_search ("Áno, abc a def", regex ("^ abc")))
cout << "matched" << endl;
inak
cout << "not matched" << endl;

Slovo „abc“ tu nie je na začiatku cieľa.

Poznámka: Znak háčika „^“ je metaznak na začiatku regulárneho výrazu, ktorý sa zhoduje so začiatkom cieľového reťazca. Stále je to metaznak na začiatku triedy znakov, kde triedu neguje.

Koniec

Ak je $ na konci regulárneho výrazu, potom sa výsledný text cieľového reťazca môže zhodovať s regulárnym výrazom. V nasledujúcom kóde je koniec cieľa „xyz“, ktorý sa zhoduje:

if (regex_search ("uvw and xyz", regex ("xyz $"))))
cout << "matched" << endl;

V nasledujúcom kóde sa neuskutočňuje žiadna zhoda:

if (regex_search ("uvw and xyz final", regex ("xyz $"))))
cout << "matched" << endl;
inak
cout << "not matched" << endl;

Výraz „xyz“ tu nie je na konci cieľa.

Zoskupenie

Závorky možno použiť na zoskupenie znakov do vzoru. Zvážte nasledujúci regulárny výraz:

„koncert (klavirista)“

Skupina je „klaviristka“ obklopená metaznakmi (a). Je to vlastne podskupina, zatiaľ čo „koncert (klavirista)“ je celá skupina. Zvážte nasledovné:

„(Klavirista je dobrý)“

Podskupina alebo podreťazec je tu: „klavirista je dobrý“.

Vedľajšie reťazce so spoločnými časťami

Účtovník je človek, ktorý sa stará o knihy. Predstavte si knižnicu s účtovníkom a policou na knihy. Predpokladajme, že jeden z nasledujúcich cieľových reťazcov je v počítači:

„Knižnica má regál, ktorý je obdivovaný.";
„Tu je účtovník.";
„Účtovník pracuje s policou na knihy.";

Predpokladajme, že programátorovým záujmom nie je vedieť, ktorá z týchto viet je v počítači. Napriek tomu je jeho záujmom vedieť, či je „knižnica“ alebo „účtovník“ prítomná v ľubovoľnom cieľovom reťazci v počítači. V tomto prípade môže byť jeho regex:

"polica na knihy | účtovník.„

Pomocou alternácie.

Všimnite si, že „kniha“, ktorá je spoločná pre obe slová, bola napísaná dvakrát, do dvoch slov vo vzore. Aby ste sa vyhli dvojitému písaniu knihy, regulárny výraz by mal byť lepšie napísaný ako:

„kniha (polica | chovateľ)“

Tu sa skupina „police | strážca“ Alternatívna metaznak stále používa, ale nie na dve dlhé slová. Používa sa pre dve koncové časti týchto dvoch dlhých slov. C ++ zaobchádza so skupinou ako s entitou. C ++ teda bude hľadať „poličku“ alebo „strážcu“, ktorý príde bezprostredne po „knihe“. Výstup nasledujúceho kódu je „zhodný“:

char str [] = "Knižnica má obdivovanú poličku na knihy.";
if (regex_search (str, regex ("kniha (polica | správca)"))))
cout << "matched" << endl;

„Regál“ a nie „účtovník“ boli priradené.

Iseca a viacriadkové regulárne regulárne výrazy

icase

Pri porovnávaní sa predvolene rozlišujú veľké a malé písmená. Môže sa však stať, že sa v ňom nebudú rozlišovať malé a veľké písmená. Aby ste to dosiahli, použite konštantu regex :: icase, ako v nasledujúcom kóde:

if (regex_search ("Spätná väzba", regex ("feed", regex :: icase))))
cout << "matched" << endl;

Výstup je „zhodný“. Takže „Spätná väzba“ s veľkým písmenom „F“ bola zhoda s výrazom „Feedback“ s malými písmenami „f“. “Regex :: icase” sa stal druhým argumentom konštruktora regex (). Bez toho by vyhlásenie neprinieslo zhodu.

Viacriadkový

Zvážte nasledujúci kód:

char str [] = "riadok 1 \ n riadok 2 \ n riadok 3";
if (regex_search (str, regex ("^.* $ ")))
cout << "matched" << endl;
inak
cout << "not matched" << endl;

Výstup „sa nezhoduje“. Regulárny výraz „^.* $, ”Zodpovedá cieľovému reťazcu od jeho začiatku do konca. „.* ”Znamená akýkoľvek znak okrem \ n, nula alebo viackrát. Kvôli znakom nového riadku (\ n) v cieli teda nedošlo k nijakej zhode.

Terč je viacriadkový reťazec. Za účelom.„aby sa znak znaku nového riadku zhodoval, je potrebné urobiť konštantu„ regex :: multiline “, druhý argument konštrukcie regex (). Ilustruje to nasledujúci kód:

char str [] = "riadok 1 \ nline 2 \ nline 3";
if (regex_search (str, regex ("^.* $ ", regex :: multiline)))
cout << "matched" << endl;
inak
cout << "not matched" << endl;

Zhoda celého cieľového reťazca

Na zosúladenie celého cieľového reťazca, ktorý nemá znak nového riadku (\ n), možno použiť funkciu regex_match (). Táto funkcia sa líši od regex_search (). Ilustruje to nasledujúci kód:

char str [] = "prvá druhá tretina";
if (regex_match (str, regex (".* druhý.* ")))
cout << "matched" << endl;

Je tu zhoda. Upozorňujeme však, že regex sa zhoduje s celým cieľovým reťazcom a cieľový reťazec nemá žiadny znak „\ n“.

Objekt match_results

Funkcia regex_search () môže prijať argument medzi cieľom a objektom regulárneho výrazu. Tento argument je objekt match_results. Je možné s ním spoznať celý zladený (časť) reťazca a zhodné podriadené reťazce. Tento objekt je špeciálne pole s metódami. Typ objektu match_results je cmatch (pre reťazcové literály).

Získavanie zápasov

Zvážte nasledujúci kód:

char str [] = "Žena, ktorú ste hľadali!";
cmatch m;
if (regex_search (str, m, regex ("w.m.n ")))
cout << m[0] << endl;

Cieľový reťazec má slovo „žena“. Výstup je „žena“, čo zodpovedá regulárnemu výrazu, „w.m.n ”. Pri indexe nula obsahuje špeciálne pole jedinú zhodu, ktorou je „žena“.

S voľbami triedy sa do špeciálneho poľa odošle iba prvý podreťazec nájdený v cieli. Ilustruje to nasledujúci kód:

cmatch m;
if (regex_search ("Krysa, mačka, netopier!", m, regulárny výraz (" [bcr] o ")))
cout << m[0] << endl;
cout << m[1] << endl;
cout << m[2] << endl;

Výstup je „rat“ z indexu nula. m [1] a m [2] sú prázdne.

Pri alternatívach sa do špeciálneho poľa odošle iba prvý podreťazec nájdený v cieli. Ilustruje to nasledujúci kód:

if (regex_search ("Králik, koza, prasa.)!", m, regulárny výraz (" koza | králik | prasa ")))
cout << m[0] << endl;
cout << m[1] << endl;
cout << m[2] << endl;

Výstup je „králik“ z nulového indexu. m [1] a m [2] sú prázdne.

Zoskupenia

Keď sú zapojené skupiny, kompletný vzor sa zhoduje, ide do bunky nula špeciálneho poľa. Nasledujúci nájdený podreťazec ide do bunky 1; nasledujúci podreťazec, ide do bunky 2; a tak ďalej. Ilustruje to nasledujúci kód:

if (regex_search ("Najlepší kníhkupec súčasnosti!", m, regulárny výraz (" kniha ((sel) (ler)) ")))
cout << m[0] << endl;
cout << m[1] << endl;
cout << m[2] << endl;
cout << m[3] << endl;

Výstup je:

kníhkupec
predajca
sel
ler

Upozorňujeme, že skupina (predajca) je pred skupinou (ja).

Pozícia zápasu

Pozícia zhody pre každý podreťazec v poli cmatch je známa. Počítanie začína od prvého znaku cieľového reťazca na pozícii nula. Ilustruje to nasledujúci kód:

cmatch m;
if (regex_search ("Najlepší kníhkupec súčasnosti!", m, regulárny výraz (" kniha ((sel) (ler)) ")))
cout << m[0] << "->„ << m.position(0) << endl;
cout << m[1] << "->„ << m.position(1) << endl;
cout << m[2] << "->„ << m.position(2) << endl;
cout << m[3] << "->„ << m.position(3) << endl;

Všimnite si použitie vlastnosti position s indexom bunky ako argument. Výstup je:

kníhkupec-> 5
predajca-> 9
sel-> 9
ler-> 12

Vyhľadať a nahradiť

Zhoda môže nahradiť nové slovo alebo frázu. Používa sa na to funkcia regex_replace (). Tentokrát je však reťazcom, kde dôjde k zámene, objekt reťazca, nie reťazcový literál. Takže do programu musí byť zahrnutá knižnica reťazcov. Ilustrácia:

#include
#include
#include
pomocou namespace std;
int main ()

string str = "Tu prichádza môj muž. Ide tvoj muž.";
string newStr = regex_replace (str, regex ("man"), "woman");
cout << newStr << endl;
návrat 0;

Funkcia regex_replace (), ako je tu kódovaná, nahrádza všetky zhody. Prvý argument funkcie je cieľ, druhý je objekt regulárneho výrazu a tretí je náhradný reťazec. Funkcia vráti nový reťazec, ktorý je cieľový, ale má náhradu. Výstup je:

"Tu prichádza moja žena.". Ide tvoja žena.“

Záver

Regulárny výraz používa vzory na priradenie podreťazcov v reťazci cieľovej sekvencie. Vzory majú metaznaky. Bežne používané funkcie pre regulárne výrazy C ++ sú: regex_search (), regex_match () a regex_replace (). Regulárny výraz je vzor v dvojitých úvodzovkách. Tieto funkcie však berú objekt regex ako argument, nielen regex. Z regulárneho výrazu musí byť urobený regexový objekt, aby ho tieto funkcie mohli používať.

Hry Ako zobraziť počítadlo FPS v hrách Linux
Ako zobraziť počítadlo FPS v hrách Linux
Hranie na systéme Linux získalo veľký tlak, keď spoločnosť Valve v roku 2012 oznámila podporu systému Linux pre klienta Steam a ich hry. Od tej doby s...
Hry Ako sťahovať a prehrávať Sid Meier's Civilization VI v systéme Linux
Ako sťahovať a prehrávať Sid Meier's Civilization VI v systéme Linux
Úvod do hry Civilization 6 predstavuje moderné poňatie klasického konceptu predstaveného v sérii hier Age of Empires. Myšlienka bola dosť jednoduchá; ...
Hry Ako inštalovať a hrať Doom na Linuxe
Ako inštalovať a hrať Doom na Linuxe
Úvod do Doom Séria Doom vznikla v 90. rokoch po vydaní pôvodného Doomu. Bol to okamžitý hit a od tej doby herná séria získala množstvo ocenení a origi...