C++'da Normal İfade Temelleri

Regular Expression Basics C



Aşağıdaki cümleyi tırnak içinde düşünün:

İşte benim adamım.

Bu dize bilgisayarın içinde olabilir ve kullanıcı, man kelimesinin olup olmadığını bilmek isteyebilir. Eğer adam kelimesine sahipse, o zaman adam kelimesini kadın olarak değiştirmek isteyebilir; böylece dize okumalı:







'İşte benim kadınım.'

Bilgisayar kullanıcısının buna benzer pek çok isteği vardır; bazıları karmaşıktır. Normal İfade, kısaltılmış, regex, bu sorunların bilgisayar tarafından ele alınması konusudur. C++, regex adlı bir kitaplık ile birlikte gelir. Bu nedenle, normal ifadeyi işlemek için bir C++ programı şununla başlamalıdır:



#Dahil etmek

#Dahil etmek

ad alanı std kullanarak;

Bu makale, C++'da Normal İfade Temellerini açıklar.



Makale İçeriği

Normal İfade Temelleri

normal ifade

İşte benim adamım gibi bir dize. yukarıdaki hedef dizi veya hedef dize veya basitçe hedeftir. aranan man, normal ifade veya basitçe regex'tir.





Eşleştirme

Aranan kelime veya kelime öbeği bulunduğunda eşleşmenin gerçekleştiği söylenir. Eşleştirmeden sonra, bir değiştirme gerçekleşebilir. Örneğin, erkek yukarıda konumlandırıldıktan sonra, kadın tarafından değiştirilebilir.

Basit Eşleştirme

Aşağıdaki program man kelimesinin nasıl eşleştiğini göstermektedir.



#Dahil etmek

#Dahil etmek

ad alanı std kullanarak;

intana()
{

normal ifade('adam');
Eğer (normal ifade_arama(İşte benim adamım.,kayıt))
maliyet<< 'eşleşti' <<son;
Başka
maliyet<< 'eşleşmedi' <<son;

dönüş 0;
}

regex_search() işlevi, bir eşleşme varsa true, eşleşme olmazsa false döndürür. Burada işlev iki argüman alır: ilki hedef dizge, ikincisi ise normal ifade nesnesidir. Normal ifadenin kendisi çift tırnak içinde 'adam'dır. main() işlevindeki ilk ifade, normal ifade nesnesini oluşturur. Regex bir türdür ve reg, normal ifade nesnesidir. Hedef dizgede 'man' görüldüğünden, yukarıdaki programın çıktısı 'eşleşir'. Hedefte 'adam' görülmediyse, regex_search() false döndürürdü ve çıktı 'eşleşmedi' olurdu.

Aşağıdaki kodun çıktısı eşleşmiyor:

normal ifade('adam');
Eğer (normal ifade_arama('İşte benim yapımım.',kayıt))
maliyet<< 'eşleşti' <<son;
Başka
maliyet<< 'eşleşmedi' <<son;

Eşleşmedi çünkü 'man' normal ifadesi, 'İşte benim yapımım' hedef dizesinin tamamında bulunamadı.

Desen

Normal ifade, yukarıdaki adam, çok basittir. Normal ifadeler genellikle o kadar basit değildir. Normal ifadelerin meta karakterleri vardır. Meta karakterler, özel anlamları olan karakterlerdir. Meta karakter, karakterlerle ilgili bir karakterdir. C++ normal ifade meta karakterleri şunlardır:

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

Meta karakterleri olan veya olmayan bir regex bir kalıptır.

Karakter Sınıfları

Köşeli parantez

Bir desen, köşeli parantez içinde karakterler içerebilir. Bununla, hedef dizedeki belirli bir konum, köşeli parantezlerin karakterlerinden herhangi biriyle eşleşir. Aşağıdaki hedefleri göz önünde bulundurun:

'Kedi odada.'

'Yarasa odada.'

'Sıçan odada.'

Normal ifade, [cbr]at, ilk hedefteki cat ile eşleşir. İkinci hedefte yarasayla eşleşir. Üçüncü hedefteki fareyle eşleşir. Bunun nedeni, kedi veya yarasa veya sıçanın 'c' veya 'b' veya 'r' ile başlamasıdır. Aşağıdaki kod segmenti bunu göstermektedir:

normal ifade('[cbr]at');
Eğer (normal ifade_arama('Kedi odada.',kayıt))
maliyet<< 'eşleşti' <<son;
Eğer (normal ifade_arama('Yarasa odada.',kayıt))
maliyet<< 'eşleşti' <<son;
Eğer (normal ifade_arama('Sıçan odada.',kayıt))
maliyet<< 'eşleşti' <<son;

Çıktı:

eşleşti

eşleşti

eşleşti

Karakter Aralığı

[cbr] desenindeki [cbr] sınıfı, hedefteki birkaç olası karakterle eşleşir. Hedefteki 'c' veya 'b' veya 'r' ile eşleşir. Hedefte 'c' veya 'b' veya 'r' ve ardından at yoksa, eşleşme olmaz.

Bir aralıkta 'c' veya 'b' veya 'r' gibi bazı olasılıklar bulunur. 0'dan 9'a kadar olan rakam aralığı 10 olasılığa sahiptir ve bunun için model [0-9]'dur. A'dan z'ye küçük harf aralığı 26 olasılığa sahiptir ve bunun için kalıp [a-z]'dir. A'dan Z'ye büyük harf aralığı 26 olasılığa sahiptir ve bunun için kalıp [A-Z] şeklindedir. – resmi olarak bir meta karakter değildir, ancak köşeli parantez içinde bir aralığı belirtir. Böylece, aşağıdakiler bir eşleşme üretir:

Eğer (normal ifade_arama('ID6id',normal ifade('[0-9]')))

maliyet<< 'eşleşti' <<son;

Normal ifadenin ikinci argüman olarak nasıl oluşturulduğuna dikkat edin. Eşleşme, 0 ila 9 aralığındaki 6 rakamı ile ID6id hedefindeki 6 rakamı arasında gerçekleşir. Yukarıdaki kod şuna eşdeğerdir:

Eğer (normal ifade_arama('ID6id',normal ifade('[0123456789]')))

maliyet<< 'eşleşti' <<son;

Aşağıdaki kod bir eşleşme üretir:

karakterP[] = 'ID6iE';

Eğer (normal ifade_arama(P,normal ifade('[a-z]')))

maliyet<< 'eşleşti' <<son;

Buradaki ilk argümanın bir dize değişkeni olduğuna ve dize değişmezi olmadığına dikkat edin. Maç, [a-z] içindeki 'i' ile ID6iE'deki 'i' arasındadır.

Bir aralığın bir sınıf olduğunu unutmayın. Desende aralığın sağında veya aralığın solunda metin olabilir. Aşağıdaki kod bir eşleşme üretir:

Eğer (normal ifade_arama('ID2id bir kimlik',normal ifade('kimlik[0-9]kimlik')))

maliyet<< 'eşleşti' <<son;

Eşleşme ID[0-9]id ve ID2id arasındadır. Hedef dizenin geri kalanı bir kimliktir ve bu durumda eşleşmez.

Normal ifade konusunda (regex'ler) kullanıldığı gibi, kelime sınıfı aslında bir küme anlamına gelir. Yani setteki karakterlerden biri eşleşmektir.

Not: Tire – yalnızca köşeli parantezler içinde bir aralığı belirten bir meta karakterdir. Normal ifadede köşeli parantezlerin dışında bir meta karakter değildir.

olumsuzlama

Bir aralık içeren bir sınıf olumsuzlanabilir. Yani kümedeki (sınıftaki) karakterlerden hiçbiri eşleşmemelidir. Bu, açılış köşeli parantezinden hemen sonra, sınıf modelinin başında ^ meta karakteriyle gösterilir. Bu nedenle, [^0-9], 0 ila 9 dahil aralığında herhangi bir karakter olmayan hedefteki uygun konumdaki karakteri eşleştirmek anlamına gelir. Bu nedenle, aşağıdaki kod bir eşleşme üretmeyecektir:

Eğer (normal ifade_arama('0123456789101112',normal ifade('[^ 0-9]')))

maliyet<< 'eşleşti' <<son;

Başka

maliyet<< 'eşleşmedi' <<son;

0 ila 9 aralığındaki bir rakam, hedef dize konumlarından herhangi birinde bulunabilir, 0123456789101112; yani eşleşme yok - olumsuzlama.

Aşağıdaki kod bir eşleşme üretir:

Eğer (normal ifade_arama('ABCDEFGHIJ',normal ifade('[^ 0-9]')))

maliyet<< 'eşleşti' <<son;

ABCDEFGHIJ hedefinde rakam bulunamadı; yani maç var.

[a-z], [^a-z] dışında bir aralıktır. Ve böylece [^a-z], [a-z]'nin olumsuzlamasıdır.

[A-Z], [^A-Z] dışında bir aralıktır. Ve böylece [^A-Z], [A-Z]'nin olumsuzlamasıdır.

Başka olumsuzluklar var.

Eşleşen Boşluklar

' veya veya veya veya f bir boşluk karakteridir. Aşağıdaki kodda, normal ifade , hedefteki ' ' ile eşleşir:

Eğer (normal ifade_arama(Birinci hattan. İkinci satırdan.',normal ifade(' ')))

maliyet<< 'eşleşti' <<son;

Herhangi bir Boşluk Karakterini Eşleştirme

Herhangi bir boşluk karakteriyle eşleşecek model veya sınıf, [ f]'dir. Aşağıdaki kodda ' ' eşleşir:

Eğer (normal ifade_arama('bir iki',normal ifade('[T F]')))

maliyet<< 'eşleşti' <<son;

Herhangi bir boşluk olmayan Karakterle Eşleştirme

Beyaz boşluk olmayan herhangi bir karakterle eşleşecek model veya sınıf, [^ f]'dir. Hedefte boşluk olmadığı için aşağıdaki kod bir eşleşme üretir:

Eğer (normal ifade_arama('1234abcd',normal ifade('[^T F]')))

maliyet<< 'eşleşti' <<son;

Desendeki nokta (.)

Kalıptaki nokta (.), hedefteki dışında kendisi de dahil olmak üzere herhangi bir karakterle eşleşir. Aşağıdaki kodda bir eşleşme üretilir:

Eğer (normal ifade_arama('1234abcd',normal ifade('.')))

maliyet<< 'eşleşti' <<son;

Hedef olduğundan, aşağıdaki kodda eşleşen sonuç yok.

Eğer (normal ifade_arama(' ',normal ifade('.')))

maliyet<< 'eşleşti' <<son;

Başka

maliyet<< 'eşleşmedi' <<son;

Not: Köşeli parantezli bir karakter sınıfında noktanın özel bir anlamı yoktur.

Eşleşen Tekrarlar

Bir karakter veya bir karakter grubu, hedef dize içinde birden fazla kez bulunabilir. Bir desen bu tekrarla eşleşebilir. Meta karakterler, ?, *, + ve {}, hedefteki tekrarı eşleştirmek için kullanılır. x, hedef dizgede ilgilenilen bir karakterse, meta karakterlerin şu anlamları vardır:

x*:maç demek'x' 0veya daha fazla kez,ben.Ve.,herhangi bir sayıda

x+:maç demek'x' 1veya daha fazla kez,ben.Ve.,en azından bir kere

x? :maç demek'x' 0veya1 zaman

x{n,}:maç demek'x'en az n veya daha fazla kez.Notvirgül.

x{n} :kibrit'x'tam olarak n kere

x{n,m}:kibrit'x'en az n kez,ama m kereden fazla değil.

Bu meta karakterlere denir niceleyiciler.

İllüstrasyonlar

*

*, önceki karakter veya önceki grupla sıfır veya daha fazla kez eşleşir. o*, hedef dizgenin köpeğindeki 'o' ile eşleşir. Ayrıca kitap ve görünümdeki oo ile eşleşir. Normal ifade, o*, The Animal booooed.. içindeki boooo ile eşleşir. Not: o*, 'o' sıfır (veya daha fazla) zaman olduğunda dig ile eşleşir.

+

+, önceki karakterle veya önceki grupla 1 veya daha fazla kez eşleşir. * için sıfır veya daha fazla kez karşılaştırın. Yani normal ifade, e+, 'e'nin bir kez geçtiği yerde, yemekteki 'e' ile eşleşir. e+ ayrıca koyunlarda ee ile eşleşir, burada 'e' birden fazla kez geçer. Not: e+ dig ile eşleşmeyecektir çünkü dig'de 'e' en az bir kez oluşmaz.

?

NS ? önceki karakterle veya önceki grupla, 0 veya 1 kez (ve daha fazla değil) eşleşir. Yani, e? dig ile eşleşir, çünkü 'e' dig, sıfır zamanında meydana gelir. e? 'e' sette bir kez geçtiği için ayarlanan eşleşmeler. not: e? hala koyunla eşleşiyor; koyunda iki e olmasına rağmen. Burada bir nüans var - sonra bakın.

{n,}

Bu, önceki bir karakterin veya önceki grubun en az n ardışık tekrarıyla eşleşir. Yani regex, e{2,} hedef koyundaki iki 'e' ile ve hedef koyundaki üç 'e' ile eşleşir. e{2,} kümeyle eşleşmiyor çünkü kümede yalnızca bir 'e' var.

{n}

Bu, önceki bir karakterin veya önceki grubun tam olarak n ardışık tekrarıyla eşleşir. Yani regex, e{2}, hedefteki iki 'e' ile eşleşiyor, koyun. e{2} kümeyle eşleşmiyor çünkü kümede yalnızca bir 'e' var. Pekala, e{2} hedefteki iki 'e' ile eşleşiyor, koyun. Burada bir nüans var - sonra bakın.

{n,m}

Bu, n'den m'ye kadar herhangi bir yerde, bir önceki karakterin veya önceki grubun birkaç ardışık tekrarıyla eşleşir. Yani, e{1,3}, 'e' içermeyen dig'teki hiçbir şeyle eşleşmez. Setteki bir 'e' ile, koyundaki iki 'e', koyundaki üç 'e' ve koyundaki üç 'e' ile eşleşir. Son maçta bir nüans var - sonra bakın.

Eşleşen Değişim

Bilgisayarda aşağıdaki hedef dizeyi göz önünde bulundurun.

Çiftlikte farklı boyutlarda domuzlar var.

Programcı, bu hedefin keçi mi, tavşan mı yoksa domuz mu olduğunu bilmek isteyebilir. Kod aşağıdaki gibi olacaktır:

karakterP[] = 'Çiftlikte farklı boylarda domuzlar var.';

Eğer (normal ifade_arama(P,normal ifade('keçi|tavşan|domuz')))

maliyet<< 'eşleşti' <<son;

Başka

maliyet<< 'eşleşmedi' <<son;

Kod bir eşleşme üretir. | alternatif karakterinin kullanımına dikkat edin. İki, üç, dört ve daha fazla seçenek olabilir. C++ ilk önce hedef dizgedeki her karakter konumunda ilk alternatif olan keçiyi eşleştirmeye çalışacaktır. Keçi ile başarılı olamazsa bir sonraki alternatifi, tavşanı dener. Tavşan ile başarılı olamazsa, bir sonraki alternatif olan domuzu dener. Domuz başarısız olursa, C++ hedefteki bir sonraki konuma geçer ve tekrar ilk alternatifle başlar.

Yukarıdaki kodda domuz eşleştirilmiştir.

Başlangıcı veya Sonu Eşleştirme

Başlangıç


^ normal ifadenin başındaysa, hedef dizenin başlangıç ​​metni normal ifadeyle eşleştirilebilir. Aşağıdaki kodda, hedefin başlangıcı eşleşen abc'dir:

Eğer (normal ifade_arama('abc ve def',normal ifade('^ abc')))

maliyet<< 'eşleşti' <<son;

Aşağıdaki kodda hiçbir eşleşme gerçekleşmez:

Eğer (normal ifade_arama('Evet, abc ve def',normal ifade('^ abc')))

maliyet<< 'eşleşti' <<son;

Başka

maliyet<< 'eşleşmedi' <<son;

Burada abc hedefin başında değil.

Not: Yönlendirme karakteri '^', normal ifadenin başlangıcında hedef dizenin başlangıcıyla eşleşen bir meta karakterdir. Sınıfı olumsuzladığı karakter sınıfının başlangıcında hala bir meta karakterdir.

Son

Normal ifadenin sonunda $ ise, hedef dizenin bitiş metni normal ifadeyle eşleştirilebilir. Aşağıdaki kodda, hedefin sonu eşleşen xyz'dir:

Eğer (normal ifade_arama('uvw ve xyz',normal ifade('xyz$')))

maliyet<< 'eşleşti' <<son;

Aşağıdaki kodda hiçbir eşleşme gerçekleşmez:

Eğer (normal ifade_arama('uvw ve xyz finali',normal ifade('xyz$')))

maliyet<< 'eşleşti' <<son;

Başka

maliyet<< 'eşleşmedi' <<son;

Burada xyz hedefin sonunda değil.

gruplama

Bir desendeki karakterleri gruplamak için parantezler kullanılabilir. Aşağıdaki normal ifadeyi göz önünde bulundurun:

'bir konser (piyanist)'

Buradaki grup, meta karakterlerle ( ve ) çevrili bir piyanisttir. Aslında bir alt gruptur, konser (piyanist) ise tüm gruptur. Aşağıdakileri göz önünde bulundur:

'(piyanist iyidir)'

Burada alt grup veya alt dizi, piyanist iyidir.

Ortak Parçalı Alt Diziler

Muhasebeci, kitaplarla ilgilenen kişidir. Bir muhasebeci ve kitaplık içeren bir kütüphane hayal edin. Aşağıdaki hedef dizelerden birinin bilgisayarda olduğunu varsayalım:

'Kütüphanenin beğenilen bir kitaplığı var.';

'İşte muhasebeci.';

'Muhasebeci kitaplık ile çalışır.';

Programcının ilgisinin bu cümlelerden hangisinin bilgisayarda olduğunu bilmek olmadığını varsayın. Yine de, ilgilendiği şey, bilgisayardaki hedef dizi ne olursa olsun, kitaplık veya muhasebecinin bulunup bulunmadığını bilmektir. Bu durumda, normal ifadesi şöyle olabilir:

'kitaplık|muhasebeci.'

Alternatif kullanma.

Her iki kelime için de ortak olan kitabın, kalıptaki iki kelimede iki kez yazıldığına dikkat edin. Kitabı iki kez yazmaktan kaçınmak için normal ifade şu şekilde yazılmalıdır:

'kitap(raf|bekçi)'

Burada, grup, raf|bekçi Dönüşüm meta karakteri hala kullanılıyor, ancak iki uzun kelime için değil. İki uzun kelimenin iki bitiş kısmı için kullanılmıştır. C++, bir grubu bir varlık olarak ele alır. Bu nedenle, C++ kitaptan hemen sonra gelen raf veya koruyucu arayacaktır. Aşağıdaki kodun çıktısı eşleştirilir:

karakterP[] = 'Kütüphanenin hayran olunan bir kitaplığı var.';

Eğer (normal ifade_arama(P,normal ifade('kitap(raf|bekçi)')))

maliyet<< 'eşleşti' <<son;

kitaplık ve muhasebeci değil eşleştirildi.

icase ve çok satırlı regex_constants

icase

Eşleştirme varsayılan olarak büyük/küçük harfe duyarlıdır. Ancak, büyük/küçük harfe duyarsız hale getirilebilir. Bunu başarmak için aşağıdaki kodda olduğu gibi regex::icase sabitini kullanın:

Eğer (normal ifade_arama('Geri bildirim',normal ifade('beslemek',normal ifade::icase)))

maliyet<< 'eşleşti' <<son;

Çıktı eşleştirilir. Bu nedenle, büyük harfli 'F' ile geri bildirim, küçük harfli 'f' ile besleme ile eşleştirildi. regex::icase, regex() yapıcısının ikinci argümanı haline getirildi. Bu olmadan, ifade bir eşleşme sağlamaz.

çok satırlı

Aşağıdaki kodu göz önünde bulundurun:

karakterP[] = 'satır 1 hat 2 satır 3';

Eğer (normal ifade_arama(P,normal ifade('^.* $')))

maliyet<< 'eşleşti' <<son;

Başka

maliyet<< 'eşleşmedi' <<son;

Çıktı eşleşmiyor. Normal ifade, ^.*$, hedef dizeyle başından sonuna kadar eşleşir. .*, , sıfır veya daha fazla kez hariç herhangi bir karakter anlamına gelir. Dolayısıyla, hedefteki yeni satır karakterleri ( ) nedeniyle eşleşme olmadı.

Hedef, çok satırlı bir dizedir. '.' öğesinin yeni satır karakteriyle eşleşmesi için, regex() yapısının ikinci argümanı olan regex::multiline sabitinin yapılması gerekir. Aşağıdaki kod bunu göstermektedir:

karakterP[] = 'satır 1 hat 2 satır 3';

Eğer (normal ifade_arama(P,normal ifade('^.* $',normal ifade::çok satırlı)))

maliyet<< 'eşleşti' <<son;

Başka

maliyet<< 'eşleşmedi' <<son;

Tüm Hedef Dizeyi Eşleştirme

Yeni satır karakterine ( ) sahip olmayan tüm hedef dizeyi eşleştirmek için regex_match() işlevi kullanılabilir. Bu işlev, regex_search() işlevinden farklıdır. Aşağıdaki kod bunu göstermektedir:

karakterP[] = 'birinci ikinci üçüncü';

Eğer (regex_match(P,normal ifade('.*ikinci.*')))

maliyet<< 'eşleşti' <<son;

Burada bir maç var. Ancak, normal ifadenin tüm hedef dizeyle eşleştiğine ve hedef dizede ' ' bulunmadığına dikkat edin.

match_results Nesnesi

regex_search() işlevi, hedef ile regex nesnesi arasında bir argüman alabilir. Bu bağımsız değişken, match_results nesnesidir. Tüm eşleşen (parça) dizi ve eşleşen alt diziler onunla bilinebilir. Bu nesne, yöntemleri olan özel bir dizidir. match_results nesne türü cmatch'tir (dize değişmezleri için).

Maç Alma

Aşağıdaki kodu göz önünde bulundurun:

karakterP[] = 'Aradığınız kadın!';

maç m;

Eğer (normal ifade_arama(P,m,normal ifade('w.m.n')))

maliyet<<m[0] <<son;

Hedef dizide kadın kelimesi var. Çıktı, w.m.n regex'ine karşılık gelen kadındır. Sıfır indeksinde, özel dizi kadın olan tek eşleşmeyi tutar.

Sınıf seçenekleri ile sadece hedefte bulunan ilk alt dizi özel diziye gönderilir. Aşağıdaki kod bunu göstermektedir:

maç m;

Eğer (normal ifade_arama('Sıçan, kedi, yarasa!',m,normal ifade('[bcr]at')))

maliyet<<m[0] <<son;

maliyet<<m[1] <<son;

maliyet<<m[2] <<son;

Çıktı, sıfır indeksinden sıçandır. m[1] ve m[2] boş.

Alternatifler ile sadece hedefte bulunan ilk alt dizi özel diziye gönderilir. Aşağıdaki kod bunu göstermektedir:

Eğer (normal ifade_arama('Tavşan, keçi, domuz!',m,normal ifade('keçi|tavşan|domuz')))

maliyet<<m[0] <<son;

maliyet<<m[1] <<son;

maliyet<<m[2] <<son;

Çıktı, sıfır indeksinden tavşandır. m[1] ve m[2] boş.

gruplamalar

Gruplar dahil olduğunda, eşleşen tam model özel dizinin sıfır hücresine gider. Bulunan bir sonraki alt dizi, hücre 1'e gider; aşağıdaki alt dize, hücre 2'ye gider; ve bunun gibi. Aşağıdaki kod bunu göstermektedir:

Eğer (normal ifade_arama('Bugünün en iyi kitapçısı!',m,normal ifade('kitap ((sel) (ler))')))

maliyet<<m[0] <<son;

maliyet<<m[1] <<son;

maliyet<<m[2] <<son;

maliyet<<m[3] <<son;

Çıktı:

kitapçı

satıcı

hücre

okuman

Grubun (satıcı) gruptan (sel) önce geldiğini unutmayın.

Maçın Konumu

Cmatch dizisindeki her alt dizi için eşleşmenin konumu bilinebilir. Sayma, sıfır konumunda, hedef dizenin ilk karakterinden başlar. Aşağıdaki kod bunu göstermektedir:

maç m;

Eğer (normal ifade_arama('Bugünün en iyi kitapçısı!',m,normal ifade('kitap ((sel) (ler))')))

maliyet<<m[0] << '->' <<m.konum(0) <<son;

maliyet<<m[1] << '->' <<m.konum(1) <<son;

maliyet<<m[2] << '->' <<m.konum(2) <<son;

maliyet<<m[3] << '->' <<m.konum(3) <<son;

Argüman olarak hücre dizini ile konum özelliğinin kullanımına dikkat edin. Çıktı:

kitapçı->5

satıcı->9

hücre->9

okuman->12

Ara ve Değiştir

Eşleşmenin yerini yeni bir kelime veya kelime öbeği alabilir. Bunun için regex_replace() işlevi kullanılır. Ancak bu sefer, değiştirmenin gerçekleştiği dize, dize değişmezi değil, dize nesnesidir. Bu nedenle, string kütüphanesi programa dahil edilmelidir. İllüstrasyon:

#Dahil etmek

#Dahil etmek

#Dahil etmek

ad alanı std kullanarak;

intana()
{
dize str= 'İşte, geliyor adamım. İşte adamın gidiyor.';
dize yeniStr=regex_replace(P,normal ifade('adam'), 'Kadın');
maliyet<<yeniStr<<son;

dönüş 0;
}

Burada kodlandığı gibi regex_replace() işlevi tüm eşleşmeleri değiştirir. İşlevin ilk argümanı hedef, ikincisi regex nesnesi ve üçüncüsü değiştirme dizesidir. İşlev, hedef olan ancak değiştirilen yeni bir dize döndürür. Çıktı:

İşte kadınım geliyor. İşte senin kadının gidiyor.

Çözüm

Normal ifade, hedef dizi dizesindeki alt dizeleri eşleştirmek için kalıpları kullanır. Desenlerin meta karakterleri vardır. C++ normal ifadeleri için yaygın olarak kullanılan işlevler şunlardır: regex_search(), regex_match() ve regex_replace(). Normal ifade, çift tırnaklı bir kalıptır. Ancak bu işlevler, yalnızca normal ifadeyi değil, bir argüman olarak normal ifade nesnesini alır. Bu işlevlerin kullanabilmesi için normal ifadenin bir normal ifade nesnesine dönüştürülmesi gerekir.