Základy regulárneho výrazu v C ++

Regular Expression Basics C



Uvažujte o nasledujúcej vete 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 obsahuje slovo muž. Ak má slovo muž, môže potom chcieť zmeniť slovo muž na ženu; aby reťazec mal znieť:







„Tu je moja žena.“

Existuje mnoho ďalších podobných túžob od používateľov počítača; niektoré sú zložité. Regulárny výraz, skrátene, regulárny výraz, je predmetom riešenia týchto problémov počítačom. C ++ je dodávaný s knižnicou s názvom regex. Program C ++ na spracovanie regexu by teda mal začínať:



#zahrnúť

#zahrnúť

pomocou priestoru názvov std;

Tento článok vysvetľuje základy regulárneho výrazu v C ++.



Obsah článku

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ľ. muž, ktorý bol hľadaný, je regulárny výraz alebo jednoducho regulárny výraz.





Zodpovedajúce

K zhode údajne dochádza, keď sa nachádza hľadané slovo alebo fráza. Po spárovaní môže dôjsť k výmene. Napríklad, keď je muž umiestnený vyššie, môže byť nahradený ženou.

Jednoduché párovanie

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



#zahrnúť

#zahrnúť

pomocou priestoru názvov std;

intHlavná()
{

regulárny výraz reg('muž');
keby (regex_search(„Tu je môj muž.“,reg))
náklady<< 'zhodný' <<endl;
inak
náklady<< „nezodpovedá“ <<endl;

vrátiť sa 0;
}

Funkcia regex_search () vráti hodnotu true, ak existuje zhoda, a vráti hodnotu false, ak nedôjde k zhode. Tu funkcia má dva argumenty: prvý je cieľový reťazec a druhý je objekt regexu. Samotný regex je v dvojitých úvodzovkách „muž“. Prvý príkaz vo funkcii main () tvorí objekt regexu. Regex 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ť „muž“. Ak by v cieli nebol videný „muž“, regex_search () by sa vrátil na hodnotu false a výstup by bol „nezodpovedajúci“.

Výstup nasledujúceho kódu sa nezhoduje:

regulárny výraz reg('muž');
keby (regex_search('Tu robím ja.',reg))
náklady<< 'zhodný' <<endl;
inak
náklady<< „nezodpovedá“ <<endl;

Nebolo nájdené zodpovedajúce riešenie, pretože výraz „man“ v jazyku sa nenašiel v celom cieľovom reťazci „Tu robím ja“.

Vzor

Regulárny výraz, muž vyššie, je veľmi jednoduchý. Regexy zvyčajne nie sú také jednoduché. Regulárne výrazy majú metaznaky. Metaznaky sú znaky so špeciálnym významom. Metacharakter je postava o postavách. Metaznaky regexu C ++ sú:

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

Regex, s alebo bez metaznakov, je vzor.

Triedy postáv

Hranaté zátvorky

Vzor môže mať znaky v hranatých zátvorkách. Vďaka tomu by sa konkrétna pozícia v cieľovom reťazci zhodovala so všetký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.“

Regex, [cbr] at by zodpovedal mačke v prvom cieli. To by zodpovedalo pálke v druhom terči. V treťom terči by to zodpovedalo potkanom. Je to preto, že mačka alebo netopier alebo potkan začínajú písmenom „c“ alebo „b“ alebo „r“. Nasledujúci segment kódu to ilustruje:

regulárny výraz reg('[cbr] o');
keby (regex_search(„Mačka je v miestnosti.“,reg))
náklady<< 'zhodný' <<endl;
keby (regex_search(„Netopier je v miestnosti.“,reg))
náklady<< 'zhodný' <<endl;
keby (regex_search(„Potkan je v miestnosti.“,reg))
náklady<< 'zhodný' <<endl;

Výstupom je:

uzavreté

uzavreté

uzavreté

Rozsah postáv

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

Niektoré možnosti ako „c“ alebo „b“ alebo „r“ existujú v rozsahu. Rozsah číslic 0 až 9 má 10 možností a vzor pre to je [0-9]. Rozsah malých abeced, a až z, má 26 možností a vzor pre to je [a-z]. Rozsah veľkých abeced, od A po Z, má 26 možností a vzor pre to je [A-Z]. - nie je oficiálne metacharacter, ale v hranatých zátvorkách by to znamenalo rozsah. Nasledujúca zhoda teda vytvára:

keby (regex_search('ID6id',regulárny výraz(„[0-9]“)))

náklady<< 'zhodný' <<endl;

Všimnite si, ako bol regex vytvorený ako druhý argument. K zhode dochádza medzi číslicou, 6 v rozsahu, 0 až 9 a 6 v cieli, ID6id. Vyššie uvedený kód je ekvivalentný:

keby (regex_search('ID6id',regulárny výraz(„[0123456789]“)))

náklady<< 'zhodný' <<endl;

Nasledujúci kód vytvára zhodu:

charp[] = „ID6iE“;

keby (regex_search(p,regulárny výraz(„[a-z]“)))

náklady<< 'zhodný' <<endl;

Všimnite si toho, že prvý argument je tu reťazcová premenná 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 vytvára zhodu:

keby (regex_search(„ID2id je ID ',regulárny výraz('ID [0-9] id')))

náklady<< 'zhodný' <<endl;

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

Ako sa používa v predmete regulárnych výrazov (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: Spojovník - je metaznak iba v hranatých zátvorkách, ktoré označujú rozsah. Nie je to metacharakter v regulárnom výrazu, mimo hranatých zátvoriek.

Negácia

Triedu vrátane rozsahu je možné negovať. To znamená, že žiadny z znakov v sade (triede) by sa nemal zhodovať. Toto je naznačené ^ metacharakterom na začiatku vzoru triedy, hneď za úvodnou hranatou zátvorkou. [^0-9] teda znamená priradenie znaku na príslušnej pozícii v cieli, čo nie je žiadny znak v rozsahu 0 až 9 vrátane. Nasledujúci kód teda nevytvorí zhodu:

keby (regex_search(„0123456789101112“,regulárny výraz(„[^ 0-9]“)))

náklady<< 'zhodný' <<endl;

inak

náklady<< „nezodpovedá“ <<endl;

Číslicu v rozsahu 0 až 9 je možné nájsť v ktorejkoľvek z cieľových pozícií reťazcov, 0123456789101112 ,; takže neexistuje žiadna zhoda - negácia.

Nasledujúci kód vytvára zhodu:

keby (regex_search(„ABCDEFGHIJ“,regulárny výraz(„[^ 0-9]“)))

náklady<< 'zhodný' <<endl;

V cieli sa nenašla žiadna číslica, ABCDEFGHIJ ,; takže je tu 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áciou [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:

keby (regex_search(„Z prvého riadku. r nZ riadku dva. “,regulárny výraz(' n')))

náklady<< 'zhodný' <<endl;

Zodpovedajúce akejkoľvek medzere

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

keby (regex_search('raz dva',regulárny výraz('[[ t r n f] ')))

náklady<< 'zhodný' <<endl;

Zodpovedajúce ľubovoľnému znaku, ktorý nie je prázdny

Vzor alebo trieda, ktorá sa zhoduje s akýmkoľvek znakom bez medzery, je [^ t r n f]. Nasledujúci kód vytvára zhodu, pretože v cieli nie sú medzery:

keby (regex_search(„1234abcd“,regulárny výraz('[^ t r n f] ')))

náklady<< 'zhodný' <<endl;

Bodka (.) Vo vzore

Bodka (.) Vo vzore sa zhoduje s akýmkoľvek znakom vrátane cieľa, okrem n, v cieli. Zhoda sa vytvorí v nasledujúcom kóde:

keby (regex_search(„1234abcd“,regulárny výraz('.')))

náklady<< 'zhodný' <<endl;

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

keby (regex_search(' n',regulárny výraz('.')))

náklady<< 'zhodný' <<endl;

inak

náklady<< „nezodpovedá“ <<endl;

Poznámka: V triede znakov so hranatými zátvorkami nemá bodka žiadny špeciálny význam.

Zodpovedajúce opakovania

Znak alebo skupina znakov sa môže v cieľovom reťazci vyskytovať viac ako raz. Vzor sa môže zhodovať s týmto opakovaním. Metaznaky?, *, +A {} sa používajú na priradenie opakovania v cieli. Ak x je požadovaný znak v cieľovom reťazci, potom majú metaznaky nasledujúci význam:

X*:znamená zápas'X' 0alebo viackrát,i.A.,ľubovoľný počet krát

X+:znamená zápas'X' 1alebo viackrát,i.A.,aspoň raz

X? :znamená zápas'X' 0alebo1 čas

X{n,}:znamená zápas'X'najmenej n alebo viackrát.Poznámkačiarka.

X{n} :zápas'X'presne n krát

X{n,m}:zápas'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 to aj s knihou a vzhľadom. Regulárny výraz, o* sa zhoduje s výrazom „boooo“ v téme Zviera, ktoré zahučalo. Poznámka: o* zodpovedá výrazu „dig“, kde „o“ nastáva nula (alebo viac) krát.

+

+ Sa zhoduje s predchádzajúcim znakom alebo predchádzajúcou skupinou, 1 alebo viackrát. Kontrastujte to nula alebo viackrát pre *. Regex, e+ sa teda zhoduje s „e“ v jedle, kde sa „e“ vyskytuje raz. e+ sa zhoduje s ee aj u oviec, kde sa „e“ vyskytuje viac ako raz. Poznámka: e+ sa nebude zhodovať s číslom, pretože v programe dig sa písmeno „e“ nevyskytuje najmenej raz.

?

The? zodpovedá predchádzajúcemu znaku alebo predchádzajúcej skupine, 0 alebo 1 krát (a nie viac). Tak čo? zhoduje sa s kopaním, pretože „e“ sa vyskytuje v kopaní, nulovom čase. e? zápasy nastavené, pretože „e“ sa vyskytuje v sade, jedenkrát. Poznámka: e? stále sa zhoduje s ovcami; hoci v ovciach sú dve „e“. Existuje tu nuance - pozri neskôr.

{n,}

To zodpovedá najmenej n po sebe idúcim opakovaniam predchádzajúceho znaku alebo predchádzajúcej skupiny. Regex, e {2,} sa teda zhoduje s dvoma „e“ v cieli, ovcami, a tromi „e“ v cieľovej ovci. e {2,} sa nezhoduje s množinou, pretože množina má iba jedno „e“.

{n}

To sa presne zhoduje s n po sebe nasledujúcimi opakovaniami predchádzajúceho znaku alebo predchádzajúcej skupiny. Regex, e {2} sa teda zhoduje s dvoma „e“ v cieli, ovce. e {2} sa nezhoduje so sadou, pretože množina má iba jedno písmeno „e“. E {2} sa zhoduje s dvoma „e“ v cieli, ovce. Existuje tu nuance - pozri neskôr.

{n, m}

To zodpovedá niekoľkým po sebe nasledujúcim opakovaniam predchádzajúceho znaku alebo predchádzajúcej skupiny, kdekoľvek od n do m vrátane. E {1,3} sa teda nezhoduje s ničím v dige, ktorý nemá žiadne „e“. Zhoduje sa s jedným „e“ v sade, s dvoma „e“ v ovciach, s tromi „e“ v ovciach a s tromi „e“ v ovciach. V poslednom zápase je nuansa - pozri neskôr.

Zodpovedajúca alternácia

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

Na farme sú ošípané rôznych veľkostí.

Programátor môže chcieť vedieť, či je týmto cieľom koza alebo králik alebo ošípané. Kód by bol nasledujúci:

charp[] = 'Na farme sú ošípané rôznych veľkostí.';

keby (regex_search(p,regulárny výraz('koza | králik | prasa')))

náklady<< 'zhodný' <<endl;

inak

náklady<< „nezodpovedá“ <<endl;

Kód vytvorí zhodu. Všimnite si použitie striedavého znaku, |. Môžu existovať dve, tri, štyri a ďalšie možnosti. C ++ sa najskôr pokúsi priradiť prvú alternatívu, kozu, na každom mieste znaku v cieľovom reťazci. Ak to s kozou neuspeje, skúsi ďalšiu alternatívu, králika. Ak to s králikom neuspeje, skúša ďalšiu alternatívu, ošípanú. Ak prasa zlyhá, C ++ sa presunie na ďalšiu pozíciu v cieli a začne znova s ​​prvou alternatívou.

Vo vyššie uvedenom kóde je ošípaná zhodná.

Zodpovedajúci začiatok alebo koniec

Začiatok


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

keby (regex_search(„abc a def“,regulárny výraz('^ abc')))

náklady<< 'zhodný' <<endl;

V nasledujúcom kóde sa neuskutočňuje žiadne párovanie:

keby (regex_search('Áno, abc a def',regulárny výraz('^ abc')))

náklady<< 'zhodný' <<endl;

inak

náklady<< „nezodpovedá“ <<endl;

Tu abc nie je na začiatku cieľa.

Poznámka: Znak circumflexu „^“ je metacharakter na začiatku regulárneho výrazu, ktorý zodpovedá začiatku cieľového reťazca. Stále je to metacharakter na začiatku triedy znakov, kde triedu neguje.

Koniec

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

keby (regex_search(„uvw a xyz“,regulárny výraz('xyz $')))

náklady<< 'zhodný' <<endl;

V nasledujúcom kóde sa neuskutočňuje žiadne párovanie:

keby (regex_search('uvw a xyz final',regulárny výraz('xyz $')))

náklady<< 'zhodný' <<endl;

inak

náklady<< „nezodpovedá“ <<endl;

Tu xyz nie je na konci cieľa.

Zoskupovanie

Zátvorky je možné použiť na zoskupenie znakov vo vzore. Zvážte nasledujúci regex:

„koncert (klavirista)“

Skupina je tu klaviristom obklopeným metaznakmi (a). Je to vlastne podskupina, zatiaľ čo koncert (klavirista) je celá skupina. Zvážte nasledujúce:

„Pianista je dobrý“

Tu je podskupina alebo podreťazec klavirista 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 poličkou. Predpokladajme, že sa v počítači nachádza jeden z nasledujúcich cieľových reťazcov:

„Knižnica má poličku s knihami, ktorú obdivujeme.“;

„Tu je účtovník.“;

„Účtovník pracuje s poličkou.“;

Predpokladajme, že programátorom nie je vedieť, ktorá z týchto viet je v počítači. Napriek tomu je jeho záujmom vedieť, či je polička alebo účtovník prítomný v akomkoľvek cieľovom reťazci v počítači. V tomto prípade môže byť jeho regex:

„polička | účtovník.“

Použitie alternácie.

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

„kniha (polica | držiteľ)“

Tu je skupina, polička | strážca Metaznak alternácie bol stále používaný, ale nie na dve dlhé slová. Bol použitý pre dve koncové časti dvoch dlhých slov. C ++ považuje skupinu za entitu. C ++ teda bude hľadať poličku alebo držiteľa, ktorý príde bezprostredne po knihe. Výstup z nasledujúceho kódu sa zhoduje:

charp[] = 'Knižnica má poličku s knihami, ktorú obdivujeme.';

keby (regex_search(p,regulárny výraz(„kniha (polica | držiteľ)“)))

náklady<< 'zhodný' <<endl;

polička a nie účtovník boli zosúladené.

Icase a viacriadkové regex_constants

icase

V predvolenom nastavení sa pri zhode rozlišujú veľké a malé písmena. Môže sa však stať, že nebude rozlišovať malé a veľké písmená. Na tento účel použite konštantu regex :: icase ako v nasledujúcom kóde:

keby (regex_search(„Spätná väzba“,regulárny výraz('krmivo',regulárny výraz::icase)))

náklady<< 'zhodný' <<endl;

Výstup je zhodný. Spätnej väzbe s veľkými písmenami „F“ sa teda zhoduje s kanálom s malými písmenami „f“. regex :: icase bol vytvorený ako druhý argument konštruktora regex (). Bez toho by vyhlásenie nevytvorilo zhodu.

Viacriadkové

Zvážte nasledujúci kód:

charp[] = 'riadok 1 nriadok 2 nriadok 3 ';

keby (regex_search(p,regulárny výraz('^. * $')))

náklady<< 'zhodný' <<endl;

inak

náklady<< „nezodpovedá“ <<endl;

Výstup nie je zhodný. Regex ^.*$ Zodpovedá cieľovému reťazcu od začiatku do konca. .* znamená ľubovoľný znak okrem n, nula alebo viackrát. Takže kvôli znakom nového riadku ( n) v cieli nedošlo k žiadnej zhode.

Cieľom je viacriadkový reťazec. Aby sa „.“ Zhodoval so znakom nového riadku, je potrebné vytvoriť konštantný regex :: multiline, druhý argument konštrukcie regex (). Nasledujúci kód to ilustruje:

charp[] = 'riadok 1 nriadok 2 nriadok 3 ';

keby (regex_search(p,regulárny výraz('^. * $',regulárny výraz::viacriadkový)))

náklady<< 'zhodný' <<endl;

inak

náklady<< „nezodpovedá“ <<endl;

Zodpovedajúci reťazcu celého cieľa

Na priradenie celého cieľového reťazca, ktorý nemá znak nového riadka ( n), je možné použiť funkciu regex_match (). Táto funkcia sa líši od funkcie regex_search (). Nasledujúci kód to ilustruje:

charp[] = 'prvý druhý tretí';

keby (regex_match(p,regulárny výraz('.*sekunda.*')))

náklady<< 'zhodný' <<endl;

Tu je zápas. Všimnite si však, že regex sa zhoduje s celým cieľovým reťazcom a cieľový reťazec nemá žiadne ' n'.

Objekt match_results

Funkcia regex_search () môže mať argument medzi cieľom a objektom regexu. Tento argument je objekt match_results. S ním môže byť známy celý zodpovedajúci (časť) reťazec a zodpovedajúce podreť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:

charp[] = „Žena, ktorú si hľadal!“;

cmatch m;

keby (regex_search(p,m,regulárny výraz('w.m.n')))

náklady<<m[0] <<endl;

Cieľový reťazec má slovo žena. Výstup je žena ‘, čo zodpovedá regexu, w.m.n. V indexe nula obsahuje špeciálne pole jedinú zhodu, ktorou je žena.

Pri možnostiach triedy je do špeciálneho poľa odoslaný iba prvý podreťazec nájdený v cieli. Nasledujúci kód to ilustruje:

cmatch m;

keby (regex_search(„Potkan, mačka, netopier!“,m,regulárny výraz('[bcr] o')))

náklady<<m[0] <<endl;

náklady<<m[1] <<endl;

náklady<<m[2] <<endl;

Výstupom je potkan z nulového indexu. m [1] a m [2] sú prázdne.

Pri alternatívach je do špeciálneho poľa odoslaný iba prvý podreťazec nájdený v cieli. Nasledujúci kód to ilustruje:

keby (regex_search(„Králik, koza, prasa!“,m,regulárny výraz('koza | králik | prasa')))

náklady<<m[0] <<endl;

náklady<<m[1] <<endl;

náklady<<m[2] <<endl;

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

Zoskupenia

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

keby (regex_search(„Najlepší kníhkupec súčasnosti!“,m,regulárny výraz(„kniha ((sel) (ler))“)))

náklady<<m[0] <<endl;

náklady<<m[1] <<endl;

náklady<<m[2] <<endl;

náklady<<m[3] <<endl;

Výstupom je:

kníhkupec

predajca

bunka

čítať

Všimnite si toho, že skupina (predajca) je pred skupinou (sel).

Pozícia zápasu

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

cmatch m;

keby (regex_search(„Najlepší kníhkupec súčasnosti!“,m,regulárny výraz(„kniha ((sel) (ler))“)))

náklady<<m[0] << '->' <<m.pozíciu(0) <<endl;

náklady<<m[1] << '->' <<m.pozíciu(1) <<endl;

náklady<<m[2] << '->' <<m.pozíciu(2) <<endl;

náklady<<m[3] << '->' <<m.pozíciu(3) <<endl;

Všimnite si použitia vlastnosti position spolu s indexom bunky ako argumentom. Výstupom je:

kníhkupec->5

predajca->9

bunka->9

čítať->12

Hľadať a nahradiť

Zhoda môže byť nahradená novým slovom alebo frázou. Na to slúži funkcia regex_replace (). Tentoraz je však reťazcom, v ktorom dôjde k nahradeniu, reťazcový objekt, nie doslovný reťazec. Knižnica reťazcov teda musí byť zahrnutá v programe. Ilustrácia:

#zahrnúť

#zahrnúť

#zahrnúť

pomocou priestoru názvov std;

intHlavná()
{
struna str= „Tu, môj muž. Tu ide tvoj muž. ';
reťazec newStr=regex_replace(p,regulárny výraz('muž'), 'žena');
náklady<<novýStr<<endl;

vrátiť sa 0;
}

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

Tu prichádza moja žena. Ide tam 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 (). Regex je vzor v dvojitých úvodzovkách. Tieto funkcie však berú ako argument nielen objekt regulárneho výrazu, ale aj regexový objekt. Predtým, ako ho tieto funkcie môžu používať, musí byť z regexu urobený regexový objekt.