Säännöllisen lausekkeen perusteet C ++: ssa

Regular Expression Basics C



Mieti seuraava lause lainausmerkeissä:

'Tässä on mieheni.'

Tämä merkkijono voi olla tietokoneen sisällä, ja käyttäjä saattaa haluta tietää, onko siinä sana man. Jos siinä on sana mies, hän saattaa haluta muuttaa sanan mies naiseksi; niin että merkkijonon pitäisi lukea:







'Tässä on vaimoni.'

Tietokoneen käyttäjältä on monia muita tällaisia ​​toiveita; jotkut ovat monimutkaisia. Säännöllinen lauseke, lyhennetty, regex, käsittelee nämä ongelmat tietokoneella. C ++: n mukana tulee kirjasto nimeltä regex. Joten C ++ -ohjelman, joka käsittelee säännöllistä lauseketta, tulisi aloittaa seuraavasti:



#sisältää

#sisältää

käyttämällä nimiavaruuden std;

Tässä artikkelissa selitetään säännöllisen lausekkeen perusteet C ++: ssa.



Artikkelin sisältö

Säännöllisen lausekkeen perusteet

Regex

Jono kuten Tässä on mieheni. yllä on kohdesekvenssi tai kohdejono tai yksinkertaisesti kohde. mies, jota etsittiin, on säännöllinen lauseke tai yksinkertaisesti regex.





Vastaavat

Vastaavuuden sanotaan tapahtuvan, kun etsittävä sana tai lause löytyy. Sovittamisen jälkeen vaihto voidaan tehdä. Esimerkiksi kun mies on yläpuolella, sen voi korvata naisella.

Yksinkertainen sovitus

Seuraava ohjelma näyttää, miten sana mies on sovitettu yhteen.



#sisältää

#sisältää

käyttämällä nimiavaruuden std;

inttärkein()
{

regex reg('mies');
jos (regex_search('Tässä on mieheni.',reg))
kustannus<< 'sovitettu' <<endl;
muu
kustannus<< 'ei vastaa' <<endl;

palata 0;
}

Funktio regex_search () palauttaa arvon true, jos on osuma, ja palauttaa arvon false, jos vastaavuutta ei tapahdu. Tässä funktiossa on kaksi argumenttia: ensimmäinen on kohdejono ja toinen on säännöllinen lauseke. Lauseke itsessään on 'mies', lainausmerkeissä. Main () -funktion ensimmäinen lause muodostaa regex -objektin. Regex on tyyppi ja reg on regex -objekti. Yllä olevan ohjelman tulos on 'sovitettu', koska 'mies' näkyy kohdejonossa. Jos 'mies' ei näkyisi kohteessa, regex_search () olisi palauttanut epätosi, ja tulos olisi 'ei täsmää'.

Seuraavan koodin tulosta ei täsmää:

regex reg('mies');
jos (regex_search('Tässä on minun tekemäni.',reg))
kustannus<< 'sovitettu' <<endl;
muu
kustannus<< 'ei vastaa' <<endl;

Ei täsmää, koska säännöllistä lauseketta 'mies' ei löytynyt koko kohdejonosta 'Tässä on minun tekemäni'.

Kuvio

Säännöllinen lauseke, mies yllä, on hyvin yksinkertainen. Regexit eivät yleensä ole niin yksinkertaisia. Säännöllisissä lausekkeissa on metamerkkejä. Metamerkit ovat merkkejä, joilla on erityinen merkitys. Metamerkki on hahmoista kertova hahmo. C ++ - säännöllisen lausekkeen metamerkit ovat:

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

Regex, metamerkillä tai ilman, on kuvio.

Hahmoluokat

Hakasulkeet

Kuviossa voi olla merkkejä hakasulkeissa. Tällöin tietty kohdejonon paikka vastaisi mitä tahansa hakasulkeissa olevaa merkkiä. Harkitse seuraavia tavoitteita:

'Kissa on huoneessa.'

'Lepakko on huoneessa.'

'Rotta on huoneessa.'

Regex, [cbr] at vastaisi ensimmäisen kohteen kissaa. Se vastaisi batia toisessa maalissa. Se vastaisi rottaa kolmannessa kohteessa. Tämä johtuu siitä, että kissa, lepakko tai rotta alkaa kirjaimella 'c' tai 'b' tai 'r'. Seuraava koodisegmentti havainnollistaa tätä:

regex reg('[cbr] klo');
jos (regex_search('Kissa on huoneessa.',reg))
kustannus<< 'sovitettu' <<endl;
jos (regex_search('Lepakko on huoneessa.',reg))
kustannus<< 'sovitettu' <<endl;
jos (regex_search('Rotta on huoneessa.',reg))
kustannus<< 'sovitettu' <<endl;

Lähtö on:

sovitettu

sovitettu

sovitettu

Hahmovalikoima

Luokka [cbr] kuviossa [cbr] vastaa useita mahdollisia kohteen merkkejä. Se vastaisi kohdetta 'c', 'b' tai 'r'. Jos kohteessa ei ole mitään 'c', 'b' tai 'r' ja sen jälkeen at, vastaavuutta ei ole.

Joitakin mahdollisuuksia, kuten 'c' tai 'b' tai 'r', on alueella. Numeroalueella 0–9 on 10 mahdollisuutta, ja kuvio on [0-9]. Pienillä aakkosilla, a-z, on 26 mahdollisuutta, ja malli on [a-z]. Isoilla kirjaimilla A-Z on 26 mahdollisuutta, ja malli on [A-Z]. - ei ole virallisesti metamerkki, mutta hakasulkeissa se ilmaisee alueen. Joten seuraava tuottaa tuloksen:

jos (regex_search('ID6id',regex('[0-9]')))

kustannus<< 'sovitettu' <<endl;

Huomaa, miten säännöllinen lauseke on muodostettu toiseksi argumentiksi. Osuma tapahtuu numeron 6 välillä 0–9 ja kohteen 6 ID6id välillä. Yllä oleva koodi vastaa:

jos (regex_search('ID6id',regex('[0123456789]')))

kustannus<< 'sovitettu' <<endl;

Seuraava koodi tuottaa osuman:

hiiltyäs[] = 'ID6iE';

jos (regex_search(s,regex('[a-z]')))

kustannus<< 'sovitettu' <<endl;

Huomaa, että ensimmäinen argumentti on merkkijonomuuttuja eikä merkkijono. Ottelu on välillä 'i' [a-z] ja 'i' ID6iE: ssä.

Älä unohda, että alue on luokka. Kuviossa voi olla tekstiä alueen oikealla puolella tai alueen vasemmalla puolella. Seuraava koodi tuottaa osuman:

jos (regex_search('ID2id on tunnus ',regex('ID [0-9] tunnus')))

kustannus<< 'sovitettu' <<endl;

Osuma on ID [0-9] id ja ID2id välillä. Loput kohdejonosta, joka on tunnus, eivät täsmää tässä tilanteessa.

Säännöllisen lausekkeen aiheessa (regexes) käytettynä sana luokka tarkoittaa itse asiassa joukkoa. Toisin sanoen yksi sarjan hahmoista on yhteensopiva.

Huomautus: Tavuviiva - on metamerkki, joka on vain hakasulkeissa ja joka osoittaa alueen. Se ei ole metamerkki hakasulkeiden ulkopuolella.

Kieltäminen

Luokka, joka sisältää alueen, voidaan hylätä. Toisin sanoen joukon (luokan) muiden merkkien ei pitäisi vastata toisiaan. Tämä on merkitty ^ -merkillä luokkakuvion alussa, heti hakasulkeen jälkeen. [^0-9] tarkoittaa siis hahmon sovittamista kohteen oikeaan kohtaan, joka ei ole mikään merkki välillä 0-9. Joten seuraava koodi ei tuota osumaa:

jos (regex_search('0123456789101112',regex('[^ 0-9]')))

kustannus<< 'sovitettu' <<endl;

muu

kustannus<< 'ei vastaa' <<endl;

Numero, joka on alueella 0–9, löytyy mistä tahansa kohdejonon kohdasta, 0123456789101112 ,; joten ottelua ei ole - kieltäminen.

Seuraava koodi tuottaa osuman:

jos (regex_search('ABCDEFGHIJ',regex('[^ 0-9]')))

kustannus<< 'sovitettu' <<endl;

Kohteesta ei löytynyt numeroa, ABCDEFGHIJ ,; on siis ottelu.

[a-z] on alueen [^a-z] ulkopuolella. Ja niin [^a-z] on [a-z]: n kieltäminen.

[A-Z] on alueen [^A-Z] ulkopuolella. Ja niin [^A-Z] on [A-Z]: n kieltäminen.

Muitakin negatiivisia on olemassa.

Vastaavat tyhjät tilat

'' Tai t tai r tai n tai f on välilyönti. Seuraavassa koodissa säännöllinen lauseke n vastaa kohteen kohdetta n:

jos (regex_search('Ensimmäisestä rivistä. r nRiviltä kaksi. ',regex('' n'')))

kustannus<< 'sovitettu' <<endl;

Mikä tahansa välilyöntihahmo

Kaavio tai luokka, joka vastaa mitä tahansa välilyöntiä, on [ t r n f]. Seuraavassa koodissa '' täsmää:

jos (regex_search('yksi kaksi',regex('[[ t r n f] ')))

kustannus<< 'sovitettu' <<endl;

Mikä tahansa ei-välilyönti-merkki

Kaava tai luokka, joka vastaa mitä tahansa muuta välilyöntiä, on [^ t r n f]. Seuraava koodi tuottaa osuman, koska kohteessa ei ole välilyöntiä:

jos (regex_search('1234abcd',regex('[^ t r n f] ')))

kustannus<< 'sovitettu' <<endl;

Kaava (.) Kuviossa

Kuvion piste (.) Vastaa mitä tahansa merkkiä, mukaan lukien itse, paitsi kohde n. Ottelu tuotetaan seuraavalla koodilla:

jos (regex_search('1234abcd',regex(''. ')))

kustannus<< 'sovitettu' <<endl;

Ei vastaavia tuloksia seuraavassa koodissa, koska kohde on n.

jos (regex_search('' n'',regex(''. ')))

kustannus<< 'sovitettu' <<endl;

muu

kustannus<< 'ei vastaa' <<endl;

Huomautus: Haarukoidulla merkkiluokalla pisteellä ei ole erityistä merkitystä.

Vastaavat toistot

Merkki tai merkkiryhmä voi esiintyä useammin kuin kerran kohdejonossa. Kuvio voi vastata tätä toistoa. Metamerkkejä,?, *, +Ja {} käytetään vastaamaan kohteen toistoa. Jos x on kiinnostava merkki kohdejonossa, metahahmolla on seuraavat merkitykset:

x*:tarkoittaa ottelua'x' 0tai useamman kerran,i.Ja.,kuinka monta kertaa tahansa

x+:tarkoittaa ottelua'x' 1tai useamman kerran,i.Ja.,ainakin kerran

x? :tarkoittaa ottelua'x' 0tai1 aika

x{n,}:tarkoittaa ottelua'x'vähintään n tai useamman kerran.Huomautuspilkku.

x{n} :ottelu'x'tasan n kertaa

x{n,m}:ottelu'x'ainakin n kertaa,mutta enintään m kertaa.

Näitä metamerkkejä kutsutaan kvantorit.

Kuvat

*

* Vastaa edellistä merkkiä tai edellistä ryhmää, nolla tai useampia kertoja. o* vastaa kohdejonon koiralla 'o'. Se sopii myös kirjaan ja ulkoasuun. Reggex, o* vastaa boooo kohdassa The animal booooed .. Huomautus: o* vastaa kaivaa, jossa 'o' esiintyy nolla (tai enemmän) kertaa.

+

+ Vastaa edellistä merkkiä tai edellistä ryhmää 1 tai useamman kerran. Vertaa sitä nollaan tai useampaan kertaan *. Joten säännöllinen lauseke e+ vastaa syötävää e: tä, jossa 'e' esiintyy kerran. e+ vastaa myös lampaiden ee: tä, jossa 'e' esiintyy useammin kuin kerran. Huomautus: e+ ei vastaa kaivaa, koska kaivossa ”e” ei esiinny vähintään kerran.

?

? vastaa edellistä merkkiä tai edellistä ryhmää, 0 tai 1 kertaa (eikä enempää). Joten, e? vastaa kaivaa, koska 'e' esiintyy kaivossa, nollassa. e? asetettu, koska 'e' esiintyy sarjassa kerran. Huomautus: e? vastaa edelleen lampaita; vaikka lampaissa on kaksi 'e': tä. Tässä on yksi vivahde - katso myöhemmin.

{n,}

Tämä vastaa vähintään n peräkkäistä edellisen merkin tai edellisen ryhmän toistoa. Regex, e {2,} vastaa kohdelampaiden kahta 'e': tä, lampaita ja kolmea 'e': tä kohdelammastessa. e {2,} ei vastaa joukkoa, koska joukossa on vain yksi 'e'.

{n}

Tämä vastaa täsmälleen n peräkkäistä edellisen merkin tai edellisen ryhmän toistoa. Joten säännöllinen lauseke e {2} vastaa kohteen kaksi lammasta. e {2} ei vastaa joukkoa, koska joukossa on vain yksi 'e'. No, e {2} vastaa kahta 'e': tä kohteessa, lammas. Tässä on yksi vivahde - katso myöhemmin.

{n, m}

Tämä vastaa useita peräkkäisiä edellisen merkin tai edellisen ryhmän toistoja missä tahansa välillä n - m. Joten e {1,3} ei vastaa mitään digissä, jossa ei ole ”e”. Se vastaa sarjassa olevaa 'e' -merkkiä, lampaiden kahta 'e' -merkkiä, lampaiden kolme 'e' -merkkiä ja lampaiden kolme 'e' -merkkiä. Viimeisessä ottelussa on vivahteita - katso myöhemmin.

Vastaava vaihtoehto

Harkitse seuraavaa kohdejonoa tietokoneessa.

Tilalla on erikokoisia sikoja.

Ohjelmoija saattaa haluta tietää, onko tällä kohteella vuohi, kani tai sika. Koodi olisi seuraava:

hiiltyäs[] = 'Tilalla on erikokoisia sikoja.';

jos (regex_search(s,regex('vuohi | kani | sika')))

kustannus<< 'sovitettu' <<endl;

muu

kustannus<< 'ei vastaa' <<endl;

Koodi tuottaa osuman. Huomaa vuorottelumerkki |. Vaihtoehtoja voi olla kaksi, kolme, neljä ja enemmän. C ++ yrittää ensin sovittaa ensimmäisen vaihtoehdon, vuohen, jokaiseen merkkijonon merkkipaikkaan. Jos se ei onnistu vuohen kanssa, se yrittää seuraavaa vaihtoehtoa, kania. Jos se ei onnistu kanilla, se yrittää seuraavaa vaihtoehtoa, sika. Jos sika epäonnistuu, C ++ siirtyy kohteen seuraavaan kohtaan ja aloittaa uudestaan ​​ensimmäisestä vaihtoehdosta.

Yllä olevassa koodissa sika täsmää.

Vastaava alku tai loppu

Alku


Jos ^ on säännöllisen lausekkeen alussa, kohdejonon alkuteksti voidaan vastata lausekkeella. Seuraavassa koodissa kohteen alku on abc, joka täsmää:

jos (regex_search('abc ja def',regex('^ abc')))

kustannus<< 'sovitettu' <<endl;

Vastaavuutta ei tapahdu seuraavassa koodissa:

jos (regex_search('Kyllä, abc ja def',regex('^ abc')))

kustannus<< 'sovitettu' <<endl;

muu

kustannus<< 'ei vastaa' <<endl;

Tässä abc ei ole tavoitteen alussa.

Huomautus: Sirkumfleksi -merkki^on metakirjain säännöllisen lausekkeen alussa ja vastaa kohdamerkkijonon alkua. Se on edelleen metamerkki merkkiluokan alussa, jossa se kieltää luokan.

Loppu

Jos $ on säännöllisen lausekkeen lopussa, kohdejonon pääteksti voidaan vastata lausekkeella. Seuraavassa koodissa kohteen loppu on xyz, joka täsmää:

jos (regex_search('uvw ja xyz',regex('xyz $')))

kustannus<< 'sovitettu' <<endl;

Vastaavuutta ei tapahdu seuraavassa koodissa:

jos (regex_search('uvw ja xyz final',regex('xyz $')))

kustannus<< 'sovitettu' <<endl;

muu

kustannus<< 'ei vastaa' <<endl;

Tässä xyz ei ole kohteen lopussa.

Ryhmittely

Suluilla voidaan ryhmitellä merkkejä kaavaan. Harkitse seuraavaa säännöllistä lauseketta:

'konsertti (pianisti)'

Ryhmä on pianisti, jota ympäröivät metamerkit (ja). Se on itse asiassa alaryhmä, kun taas konsertti (pianisti) on koko ryhmä. Harkitse seuraavaa:

'' (Pianisti on hyvä) ''

Tässä alaryhmä tai alijono on, pianisti on hyvä.

Yhteisosilla varustetut alisäikeet

Kirjanpitäjä on henkilö, joka huolehtii kirjoista. Kuvittele kirjasto, jossa on kirjanpitäjä ja kirjahylly. Oletetaan, että tietokoneessa on jokin seuraavista kohdejonoista:

'Kirjastossa on kirjahylly, jota ihaillaan.';

'Tässä on kirjanpitäjä.';

'Kirjanpitäjä työskentelee kirjahyllyn kanssa.';

Oletetaan, että ohjelmoijan etu ei ole tietää, mikä näistä lauseista on tietokoneessa. Silti hänen kiinnostuksensa on tietää, onko kirjahylly tai kirjanpitäjä läsnä missä tahansa tietokoneen merkkijonossa. Tässä tapauksessa hänen säännöllinen lausekkeensa voi olla:

'kirjahylly | kirjanpitäjä.'

Käyttämällä vuorottelua.

Huomaa, että kirja, joka on yhteinen molemmille sanoille, on kirjoitettu kahdesti kuvion kahteen sanaan. Välttääksesi kirjoittamasta kirjaa kahdesti, säännöllinen lauseke olisi parempi kirjoittaa seuraavasti:

'kirja (hylly | pitäjä)'

Tässä ryhmä, hylly | pitäjä Vaihto -metamerkkiä on edelleen käytetty, mutta ei kahdella pitkällä sanalla. Sitä on käytetty kahden pitkän sanan kahdessa pääteosassa. C ++ käsittelee ryhmää kokonaisuutena. Joten C ++ etsii hyllyä tai säilyttäjää, joka tulee heti kirjan jälkeen. Seuraavan koodin lähtö on täsmäytetty:

hiiltyäs[] = 'Kirjastossa on kirjahylly, jota ihaillaan.';

jos (regex_search(s,regex('kirja (hylly | pitäjä)')))

kustannus<< 'sovitettu' <<endl;

kirjahylly eikä kirjanpitäjä on sovitettu yhteen.

Icase ja moniriviset regex_constants

icase

Täsmäytys erottaa isot ja pienet kirjaimet oletuksena. Se voidaan kuitenkin tehdä kirjainkoolla merkityksettömäksi. Käytä tätä vakioon regex :: icase, kuten seuraavassa koodissa:

jos (regex_search(Palaute,regex('syöttö',regex::icase)))

kustannus<< 'sovitettu' <<endl;

Lähtö on sovitettu. Palaute isolla F -kirjaimella on siis täsmätty syötteellä, jossa on pieni f -kirjain. regex :: icase on tehty regex () -konstruktorin toiseksi argumentiksi. Ilman sitä lausunto ei antaisi osumaa.

Monilinjainen

Harkitse seuraavaa koodia:

hiiltyäs[] = 'rivi 1 nrivi 2 nrivi 3 ';

jos (regex_search(s,regex('^. * $')))

kustannus<< 'sovitettu' <<endl;

muu

kustannus<< 'ei vastaa' <<endl;

Lähtöä ei täsmää. Reggex, ^.*$, Vastaa kohdamerkkijonoa alusta loppuun. .* tarkoittaa mitä tahansa merkkiä paitsi n, nolla tai useampia kertoja. Kohteessa olevien uuden rivin merkkien ( n) vuoksi hakua ei siis löytynyt.

Kohde on monirivinen merkkijono. Jotta '.' Vastaisi uuden rivin merkkiä, on tehtävä vakio regex :: multiline, joka on regex () -rakenteen toinen argumentti. Seuraava koodi havainnollistaa tätä:

hiiltyäs[] = 'rivi 1 nrivi 2 nrivi 3 ';

jos (regex_search(s,regex('^. * $',regex::monirivinen)))

kustannus<< 'sovitettu' <<endl;

muu

kustannus<< 'ei vastaa' <<endl;

Koko kohdejonon sovittaminen

Regex_match () -funktiota voidaan käyttää vastaamaan koko kohdejonoa, jossa ei ole uuden rivin merkkiä ( n). Tämä toiminto on erilainen kuin regex_search (). Seuraava koodi havainnollistaa tätä:

hiiltyäs[] = 'ensimmäinen toinen kolmas';

jos (regex_match(s,regex('.*toinen.*')))

kustannus<< 'sovitettu' <<endl;

Täällä on ottelu. Huomaa kuitenkin, että säännöllinen lauseke vastaa koko kohdejonoa ja kohdejonossa ei ole ' n'.

Match_results -objekti

Funktio regex_search () voi ottaa argumentin kohteen ja säännöllisen lausekkeen välillä. Tämä argumentti on match_results -objekti. Koko sovitettu (osa) merkkijono ja sovitetut alijonot voidaan tunnistaa sen kanssa. Tämä objekti on erityinen matriisiryhmä. Match_results -objektityyppi on cmatch (merkkijono -kirjaimille).

Ottelujen saaminen

Harkitse seuraavaa koodia:

hiiltyäs[] = 'Nainen, jota etsit!';

cmatch m;

jos (regex_search(s,m,regex('w.m.n')))

kustannus<<m[0] <<endl;

Kohdesarjassa on sana nainen. Tulos on nainen ”, joka vastaa säännöllistä lauseketta, w.m.n. Indeksin nollassa erikoismatriisissa on ainoa ottelu, joka on nainen.

Luokka-asetuksilla vain ensimmäinen kohde-osamerkkijono lähetetään erikoismatriisiin. Seuraava koodi havainnollistaa tätä:

cmatch m;

jos (regex_search('Rotta, kissa, lepakko!',m,regex('[bcr] klo')))

kustannus<<m[0] <<endl;

kustannus<<m[1] <<endl;

kustannus<<m[2] <<endl;

Tulos on rotta indeksin nollasta. m [1] ja m [2] ovat tyhjiä.

Vaihtoehtoja käytettäessä vain kohde-osiosta löydetty ensimmäinen alimerkkijono lähetetään erikoismatriisiin. Seuraava koodi havainnollistaa tätä:

jos (regex_search('Kani, vuohi, sika!',m,regex('vuohi | kani | sika')))

kustannus<<m[0] <<endl;

kustannus<<m[1] <<endl;

kustannus<<m[2] <<endl;

Tulos on kani indeksin nollasta. m [1] ja m [2] ovat tyhjiä.

Ryhmät

Kun ryhmät ovat mukana, koko kuvio täsmää, menee erikoismatriisin soluun nolla. Seuraava löydetty alimerkkijono menee soluun 1; seuraava merkkijono menee soluun 2; ja niin edelleen. Seuraava koodi havainnollistaa tätä:

jos (regex_search('Paras kirjakauppias tänään!',m,regex('kirja ((sel) (ler))')))

kustannus<<m[0] <<endl;

kustannus<<m[1] <<endl;

kustannus<<m[2] <<endl;

kustannus<<m[3] <<endl;

Lähtö on:

kirjakauppias

myyjä

solu

lukea

Huomaa, että ryhmä (myyjä) tulee ryhmän (sel) edelle.

Ottelun sijainti

Cmatch-taulukon kunkin alimerkkijonon osuman sijainti voidaan tietää. Laskenta alkaa kohdejonon ensimmäisestä merkistä kohdassa nolla. Seuraava koodi havainnollistaa tätä:

cmatch m;

jos (regex_search('Paras kirjakauppias tänään!',m,regex('kirja ((sel) (ler))')))

kustannus<<m[0] << '->' <<m.asema(0) <<endl;

kustannus<<m[1] << '->' <<m.asema(1) <<endl;

kustannus<<m[2] << '->' <<m.asema(2) <<endl;

kustannus<<m[3] << '->' <<m.asema(3) <<endl;

Huomaa sijaintiominaisuuden käyttö soluindeksin kanssa argumenttina. Lähtö on:

kirjakauppias->5

myyjä->9

solu->9

lukea->12

Etsi ja korvaa

Uusi sana tai lause voi korvata ottelun. Tätä varten käytetään funktiota regex_replace (). Tällä kertaa merkkijono, jossa korvaus tapahtuu, on merkkijonoobjekti, ei merkkijono. Joten merkkijonokirjasto on sisällytettävä ohjelmaan. Kuva:

#sisältää

#sisältää

#sisältää

käyttämällä nimiavaruuden std;

inttärkein()
{
merkkijono str= 'Tässä, mieheni tulee. Sinne menee miehesi. ';
merkkijono newStr=regex_replace(s,regex('mies'), 'nainen');
kustannus<<newStr<<endl;

palata 0;
}

Regex_replace () -funktio, kuten tässä on koodattu, korvaa kaikki ottelut. Funktion ensimmäinen argumentti on kohde, toinen on regex -objekti ja kolmas on korvaava merkkijono. Funktio palauttaa uuden merkkijonon, joka on kohde, mutta jolla on korvaava merkkijono. Lähtö on:

Tässä tulee vaimoni. Siellä menee naisesi.

Johtopäätös

Säännöllinen lauseke käyttää kuvioita kohdejonojonon merkkijonojen vastaamiseksi. Kuvioissa on metamerkkejä. Yleisesti käytettyjä funktioita säännöllisille lausekkeille C ++ ovat: regex_search (), regex_match () ja regex_replace (). Lauseke on kuvio lainausmerkeissä. Nämä funktiot käyttävät kuitenkin regex -objektia argumenttina eivätkä vain regexiä. Regex on tehtävä regex -objektiksi, ennen kuin nämä toiminnot voivat käyttää sitä.