Asas Ekspresi Biasa dalam C ++

Regular Expression Basics C



Pertimbangkan ayat berikut dalam petikan:

'Inilah lelaki saya.'

Rentetan ini mungkin ada di dalam komputer, dan pengguna mungkin ingin mengetahui apakah ia mempunyai kata man. Sekiranya mempunyai kata lelaki, dia mungkin ingin menukar kata lelaki menjadi wanita; supaya rentetan itu dapat dibaca:







'Inilah wanita saya.'

Terdapat banyak keinginan lain seperti ini dari pengguna komputer; ada yang kompleks. Ungkapan Biasa, disingkat, regex, adalah subjek menangani masalah ini oleh komputer. C ++ dilengkapi dengan perpustakaan yang dipanggil regex. Oleh itu, program C ++ untuk menangani regex harus bermula dengan:



#sertakan

#sertakan

menggunakan namespace std;

Artikel ini menerangkan Dasar-Dasar Ekspresi Biasa dalam C ++.



Kandungan Artikel

Asas Ungkapan Biasa

Regex

Rentetan seperti Inilah lelaki saya. di atas adalah urutan sasaran atau rentetan sasaran atau sekadar sasaran. lelaki, yang dicari, adalah ungkapan biasa, atau hanya, regex.





Sepadan

Pencocokan dikatakan berlaku ketika kata atau frasa yang dicari berada. Setelah sepadan, penggantian boleh berlaku. Contohnya, setelah lelaki berada di atas, ia boleh digantikan oleh wanita.

Padanan Mudah

Program berikut menunjukkan bagaimana perkataan man dipadankan.



#sertakan

#sertakan

menggunakan namespace std;

intutama()
{

reg regex('lelaki');
sekiranya (regex_search('Inilah lelaki saya.',pendaftaran))
kos<< 'dipadankan' <<endl;
yang lain
kos<< 'tidak sepadan' <<endl;

kembali 0;
}

Fungsi regex_search () kembali benar jika ada padanan dan kembali palsu jika tidak ada padanan berlaku. Di sini, fungsi mengambil dua argumen: yang pertama adalah rentetan sasaran, dan yang kedua adalah objek regex. Regex itu sendiri adalah 'manusia', dalam petikan ganda. Pernyataan pertama dalam fungsi utama () membentuk objek regex. Regex adalah jenis, dan reg adalah objek regex. Output program di atas 'dipadankan', kerana 'lelaki' dilihat pada rentetan sasaran. Sekiranya 'man' tidak terlihat dalam target, regex_search () akan kembali palsu, dan outputnya akan 'tidak sesuai'.

Keluaran kod berikut tidak sepadan:

reg regex('lelaki');
sekiranya (regex_search('Inilah hasil karya saya.',pendaftaran))
kos<< 'dipadankan' <<endl;
yang lain
kos<< 'tidak sepadan' <<endl;

Tidak sesuai kerana 'man' regex tidak dapat dijumpai di keseluruhan rentetan sasaran, 'Inilah hasil karya saya.'

Corak

Ungkapan biasa, lelaki di atas, sangat sederhana. Regex biasanya tidak semudah itu. Ungkapan biasa mempunyai metakarakter. Metacharacters adalah watak dengan makna khas. Metacharacter adalah watak mengenai watak. Metakarakter regex C ++ adalah:

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

Regex, dengan atau tanpa metacharacters, adalah corak.

Kelas Perwatakan

Dalam kurungan

Corak boleh mempunyai watak dalam tanda kurung persegi. Dengan ini, kedudukan tertentu dalam rentetan sasaran akan sesuai dengan mana-mana watak kurung siku. Pertimbangkan sasaran berikut:

'Kucing ada di dalam bilik.'

'Kelawar ada di dalam bilik.'

'Tikus itu ada di dalam bilik.'

Regex, [cbr] at akan menandingi kucing pada sasaran pertama. Itu akan menandingi kelawar pada sasaran kedua. Itu akan menandingi tikus pada sasaran ketiga. Ini kerana, kucing atau kelawar atau tikus bermula dengan ‘c’ atau ‘b’ atau ‘r’. Segmen kod berikut menggambarkan ini:

reg regex('[cbr] pada');
sekiranya (regex_search('Kucing ada di dalam bilik.',pendaftaran))
kos<< 'dipadankan' <<endl;
sekiranya (regex_search('Kelawar ada di dalam bilik.',pendaftaran))
kos<< 'dipadankan' <<endl;
sekiranya (regex_search('Tikus itu ada di dalam bilik.',pendaftaran))
kos<< 'dipadankan' <<endl;

Keluarannya adalah:

dipadankan

dipadankan

dipadankan

Julat Watak

Kelas, [cbr] dalam corak [cbr], akan sesuai dengan beberapa watak yang mungkin dalam sasaran. Ia akan sesuai dengan ‘c’ atau ‘b’ atau ‘r’ pada sasaran. Sekiranya sasaran tidak memiliki 'c' atau 'b' atau 'r', diikuti oleh di, tidak akan ada yang cocok.

Beberapa kemungkinan seperti 'c' atau 'b' atau 'r' ada dalam julat. Julat digit, 0 hingga 9 mempunyai 10 kemungkinan, dan coraknya adalah [0-9]. Julat huruf kecil, a hingga z, mempunyai 26 kemungkinan, dan coraknya adalah [a-z]. Julat huruf besar, A hingga Z, mempunyai 26 kemungkinan, dan coraknya adalah [A-Z]. - bukan secara rasmi watak metakarakter, tetapi dalam tanda kurung persegi, ini akan menunjukkan julat. Jadi, yang berikut menghasilkan padanan:

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

kos<< 'dipadankan' <<endl;

Perhatikan bagaimana regex telah dibina sebagai argumen kedua. Perlawanan berlaku antara digit, 6 dalam julat, 0 hingga 9, dan 6 di sasaran, ID6id. Kod di atas bersamaan dengan:

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

kos<< 'dipadankan' <<endl;

Kod berikut menghasilkan padanan:

charhlm[] = 'ID6iE';

sekiranya (regex_search(hlm,regex('[a-z]')))

kos<< 'dipadankan' <<endl;

Perhatikan bahawa argumen pertama di sini adalah pemboleh ubah rentetan dan bukan literal rentetan. Perlawanan antara ‘i’ di [a-z] dan ‘i’ di ID6iE.

Jangan lupa bahawa julat adalah kelas. Terdapat teks di sebelah kanan julat atau di sebelah kiri julat dalam corak. Kod berikut menghasilkan padanan:

sekiranya (regex_search('ID2id adalah ID ',regex('ID [0-9] id')))

kos<< 'dipadankan' <<endl;

Perlawanan antara ID [0-9] dan ID2id. Selebihnya dari rentetan sasaran, adalah ID, tidak sepadan dalam situasi ini.

Seperti yang digunakan dalam subjek ekspresi biasa (regexes), kelas kata sebenarnya bermaksud satu set. Maksudnya, salah satu watak dalam set adalah sesuai.

Nota: Kata hubung - adalah metakarakter hanya dalam tanda kurung persegi, menunjukkan julat. Ini bukan metakarakter dalam regex, di luar tanda kurung.

Penafian

Kelas termasuk julat boleh ditolak. Maksudnya, bukan watak dalam set (kelas) yang sesuai. Ini ditunjukkan dengan metakarakter ^ pada awal corak kelas, tepat setelah tanda kurung pembukaan. Oleh itu, [^ 0-9] bermaksud memadankan watak pada kedudukan yang sesuai dalam sasaran, yang bukan watak dalam julat, termasuk 0 hingga 9. Jadi kod berikut tidak akan menghasilkan padanan:

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

kos<< 'dipadankan' <<endl;

yang lain

kos<< 'tidak sepadan' <<endl;

Satu digit dalam julat 0 hingga 9 dapat ditemukan di salah satu posisi rentetan sasaran, 0123456789101112,; jadi tidak ada padanan - penolakan.

Kod berikut menghasilkan padanan:

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

kos<< 'dipadankan' <<endl;

Tidak ada digit yang dapat dijumpai dalam sasaran, ABCDEFGHIJ,; jadi ada pertandingan.

[a-z] adalah julat di luar [^ a-z]. Oleh itu [^ a-z] adalah penolakan [a-z].

[A-Z] adalah julat di luar [^ A-Z]. Oleh itu [^ A-Z] adalah penolakan [A-Z].

Negasi lain ada.

Tempat kosong yang sepadan

'' Atau t atau r atau n atau f adalah watak ruang kosong. Dalam kod berikut, regex, n sepadan dengan n 'dalam sasaran:

sekiranya (regex_search('Dari baris pertama. r nDari baris kedua. ',regex(' n')))

kos<< 'dipadankan' <<endl;

Memadankan mana-mana Watak Ruang Kosong

Corak atau kelas yang sesuai dengan mana-mana watak ruang kosong adalah, [ t r n f]. Dalam kod berikut, '' dipadankan:

sekiranya (regex_search('satu dua',regex('[ t r n f] ')))

kos<< 'dipadankan' <<endl;

Memadankan mana-mana Watak Tanpa Ruang Putih

Corak atau kelas yang sesuai dengan mana-mana watak ruang putih adalah, [^ t r n f]. Kod berikut menghasilkan padanan kerana tidak ada ruang kosong dalam sasaran:

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

kos<< 'dipadankan' <<endl;

Tempoh (.) Dalam Corak

Tempoh (.) Dalam corak sesuai dengan mana-mana watak termasuk dirinya sendiri, kecuali n, dalam sasaran. Sepadan dihasilkan dalam kod berikut:

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

kos<< 'dipadankan' <<endl;

Tidak ada hasil yang sepadan dalam kod berikut kerana sasarannya n.

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

kos<< 'dipadankan' <<endl;

yang lain

kos<< 'tidak sepadan' <<endl;

Catatan: Di dalam kelas watak dengan tanda kurung persegi, noktah itu tidak mempunyai makna khusus.

Pengulangan Sepadan

Watak atau sekumpulan watak boleh berlaku lebih dari sekali dalam rentetan sasaran. Corak dapat menandingi pengulangan ini. Metakarakter,?, *, +, Dan {} digunakan untuk mencocokkan pengulangan dalam sasaran. Sekiranya x adalah watak yang menarik dalam rentetan sasaran, maka metakarakter mempunyai makna berikut:

x*:bermaksud padanan'x' 0atau lebih banyak kali,i.Dan.,sebilangan kali

x+:bermaksud padanan'x' 1atau lebih banyak kali,i.Dan.,sekurang-kurangnya sekali

x? :bermaksud padanan'x' 0atau1 masa

x{n,}:bermaksud padanan'x'sekurang-kurangnya n atau lebih banyak kali.Catatankoma.

x{n} :padanan'x'tepat n kali

x{n,m}:padanan'x'sekurang-kurangnya n kali,tetapi tidak lebih daripada m kali.

Metakarakter ini dipanggil pembilang.

Ilustrasi

*

* Sepadan dengan watak sebelumnya atau kumpulan sebelumnya, sifar atau lebih banyak kali. o * sepadan dengan 'o' pada anjing rentetan sasaran. Ia juga sesuai dengan oo dan buku. The regex, o * match boooo di The animal booooed .. Catatan: o * match dig, di mana 'o' berlaku sifar (atau lebih) masa.

+

+ Sepadan dengan watak sebelumnya atau kumpulan sebelumnya, 1 atau lebih kali. Bezakannya dengan sifar atau lebih banyak kali untuk *. Jadi regex, e + sepadan dengan 'e' dalam makan, di mana 'e' berlaku sekali. e + juga sepadan dengan ee pada biri-biri, di mana ‘e’ berlaku lebih dari satu kali. Catatan: e + tidak akan sepadan dengan dig kerana dalam penggalian, ‘e’ tidak berlaku sekurang-kurangnya sekali.

?

The? sepadan dengan watak sebelumnya atau kumpulan sebelumnya, 0 atau 1 kali (dan tidak lebih). Jadi, e? padanan dig kerana ‘e’ berlaku dalam penggalian, masa sifar. e? padanan ditetapkan kerana ‘e’ berlaku dalam satu set, satu masa. Nota: e? masih sepadan dengan biri-biri; walaupun terdapat dua ‘e’ pada biri-biri. Terdapat nuansa di sini - lihat kemudian.

{n,}

Ini sesuai dengan sekurang-kurangnya pengulangan berturut-turut watak sebelumnya atau kumpulan sebelumnya. Jadi regex, e {2,} sepadan dengan dua 'e di sasaran, domba, dan tiga' e di sasaran sasaran. e {2,} tidak sesuai dengan set, kerana set hanya mempunyai satu 'e'.

{n}

Ini sesuai dengan pengulangan berturut-turut dari watak sebelumnya atau kumpulan sebelumnya. Jadi regex, e {2} sepadan dengan dua 'e's di sasaran, domba. e {2} tidak sepadan dengan set kerana set hanya mempunyai satu 'e'. Baiklah, {2} sepadan dengan dua 'e' pada sasaran, sheeep. Terdapat nuansa di sini - lihat kemudian.

{n, m}

Ini sesuai dengan beberapa pengulangan berturut-turut dari watak sebelumnya atau kumpulan sebelumnya, di mana saja dari n hingga m, inklusif. Jadi, e {1,3} tidak sepadan dengan penggalian, yang tidak mempunyai 'e'. Ini sesuai dengan satu 'e' dalam set, dua 'e' dalam domba, tiga 'e dalam sheeep, dan tiga' e's in sheeeep. Terdapat nuansa pada perlawanan terakhir - lihat kemudian.

Alternatif yang sepadan

Pertimbangkan rentetan sasaran berikut di komputer.

Ladang ini mempunyai khinzir dengan pelbagai ukuran.

Pengaturcara mungkin ingin mengetahui sama ada sasaran ini mempunyai kambing atau arnab atau babi. Kodnya adalah seperti berikut:

charhlm[] = 'Ladang ini mempunyai babi dengan ukuran yang berbeza.';

sekiranya (regex_search(hlm,regex('kambing | arnab | babi')))

kos<< 'dipadankan' <<endl;

yang lain

kos<< 'tidak sepadan' <<endl;

Kod menghasilkan padanan. Perhatikan penggunaan watak gantian, |. Terdapat dua, tiga, empat, dan lebih banyak pilihan. C ++ pertama kali akan mencuba padanan alternatif pertama, kambing, pada setiap kedudukan watak dalam rentetan sasaran. Sekiranya tidak berjaya dengan kambing, ia mencuba alternatif seterusnya, arnab. Sekiranya tidak berjaya dengan arnab, ia mencuba alternatif seterusnya, babi. Sekiranya babi gagal, maka C ++ bergerak ke kedudukan seterusnya di sasaran dan bermula dengan alternatif pertama sekali lagi.

Dalam kod di atas, babi dipadankan.

Permulaan atau Akhir yang sepadan

Permulaan


Jika ^ berada di awal regex, maka teks awal rentetan sasaran dapat dipadankan dengan regex. Dalam kod berikut, permulaan sasaran adalah abc, yang dipadankan:

sekiranya (regex_search('abc dan def',regex('^ abc')))

kos<< 'dipadankan' <<endl;

Tiada pencocokan berlaku dalam kod berikut:

sekiranya (regex_search('Ya, abc dan def',regex('^ abc')))

kos<< 'dipadankan' <<endl;

yang lain

kos<< 'tidak sepadan' <<endl;

Di sini, abc tidak berada di awal sasaran.

Catatan: Karakter circumflex, '^', adalah metacharacter pada awal regex, sepadan dengan permulaan rentetan sasaran. Ia masih merupakan metacharacter pada permulaan kelas watak, di mana ia menolak kelas.

Tamat

Sekiranya $ berada di akhir regex, maka teks akhir rentetan sasaran dapat dipadankan dengan regex. Dalam kod berikut, akhir sasaran adalah xyz, yang dipadankan:

sekiranya (regex_search('uvw dan xyz',regex('xyz $')))

kos<< 'dipadankan' <<endl;

Tiada pencocokan berlaku dalam kod berikut:

sekiranya (regex_search('uvw dan xyz final',regex('xyz $')))

kos<< 'dipadankan' <<endl;

yang lain

kos<< 'tidak sepadan' <<endl;

Di sini, xyz tidak berada di hujung sasaran.

Pengumpulan

Tanda kurung boleh digunakan untuk mengelompokkan watak dalam corak. Pertimbangkan regex berikut:

'konsert (pemain piano)'

Kumpulan di sini adalah pemain piano yang dikelilingi oleh watak-watak (dan). Ini sebenarnya adalah sub-kumpulan, sementara konsert (pemain piano) adalah keseluruhan kumpulan. Pertimbangkan perkara berikut:

'Pemain piano itu bagus'

Di sini, sub-kumpulan atau sub-string adalah, pemain piano bagus.

Sub-rentetan dengan Bahagian Biasa

Penjaga buku adalah orang yang menjaga buku. Bayangkan perpustakaan dengan penjaga buku dan rak buku. Andaikan bahawa salah satu rentetan sasaran berikut ada di komputer:

'Perpustakaan mempunyai rak buku yang dikagumi.';

'Inilah penjaga buku.';

'Penjaga buku bekerja dengan rak buku.';

Anggaplah minat pengaturcara untuk tidak mengetahui ayat mana yang terdapat dalam komputer. Namun, minatnya adalah untuk mengetahui sama ada rak buku atau penjaga buku ada dalam rentetan sasaran yang ada di komputer. Dalam kes ini, regexnya boleh:

'rak buku | penjaga buku.'

Menggunakan gantian.

Perhatikan bahawa buku, yang umum untuk kedua-dua kata, telah ditaip dua kali, dalam dua perkataan dalam corak. Untuk mengelakkan menaip buku dua kali, regex lebih baik ditulis sebagai:

'buku (rak | penjaga)'

Di sini, kumpulan, rak | penjaga Metakarakter penggantian masih digunakan, tetapi tidak untuk dua perkataan panjang. Telah digunakan untuk dua bahagian akhir dari dua perkataan panjang. C ++ memperlakukan kumpulan sebagai entiti. Jadi, C ++ akan mencari rak atau penjaga yang datang sejurus selepas menempah. Keluaran kod berikut dipadankan:

charhlm[] = 'Perpustakaan mempunyai rak buku yang dikagumi.';

sekiranya (regex_search(hlm,regex('buku (rak | penjaga)')))

kos<< 'dipadankan' <<endl;

rak buku dan bukan penjaga buku telah dipadankan.

Ikon icase dan multiline regex_constants

ais

Pemadanan adalah peka huruf besar kecil secara lalai. Walau bagaimanapun, ia boleh dibuat sebagai perkara yang tidak sensitif. Untuk mencapai ini, gunakan pemalar regex :: icase, seperti dalam kod berikut:

sekiranya (regex_search('Maklum balas',regex('suapan',regex::ais)))

kos<< 'dipadankan' <<endl;

Keluaran dipadankan. Oleh itu, Maklum balas dengan huruf besar 'F' telah dipadankan dengan suapan dengan huruf kecil 'f'. regex :: icase telah dijadikan argumen kedua dari pembangun regex (). Tanpa itu, pernyataan itu tidak akan menghasilkan padanan.

Multiline

Pertimbangkan kod berikut:

charhlm[] = 'baris 1 nbaris 2 ngarisan 3 ';

sekiranya (regex_search(hlm,regex('^. * $')))

kos<< 'dipadankan' <<endl;

yang lain

kos<< 'tidak sepadan' <<endl;

Keluarannya tidak sepadan. Regex, ^. * $, Sepadan dengan rentetan sasaran dari awal hingga akhir. . * bermaksud sebarang watak kecuali n, sifar atau lebih banyak kali. Oleh itu, kerana watak barisan baru ( n) dalam sasaran, tidak ada yang sesuai.

Sasarannya adalah rentetan multiline. Agar ‘.’ Sesuai dengan watak garis baru, regex tetap :: multiline harus dibuat, argumen kedua pembinaan regex (). Kod berikut menggambarkan ini:

charhlm[] = 'baris 1 nbaris 2 ngarisan 3 ';

sekiranya (regex_search(hlm,regex('^. * $',regex::pelbagai lapisan)))

kos<< 'dipadankan' <<endl;

yang lain

kos<< 'tidak sepadan' <<endl;

Memadankan Rentetan Keseluruhan Sasaran

Untuk mencocokkan keseluruhan rentetan sasaran, yang tidak memiliki karakter baris baru ( n), fungsi regex_match () dapat digunakan. Fungsi ini berbeza dengan regex_search (). Kod berikut menggambarkan ini:

charhlm[] = 'pertama kedua ketiga';

sekiranya (regex_match(hlm,regex('. * kedua. *')))

kos<< 'dipadankan' <<endl;

Ada pertandingan di sini. Namun, perhatikan bahawa regex sepadan dengan keseluruhan rentetan sasaran, dan rentetan sasaran tidak mempunyai ‘ n’.

Objek match_results

Fungsi regex_search () dapat mengambil argumen di antara sasaran dan objek regex. Hujah ini adalah objek match_results. Rentetan keseluruhan (bahagian) dan sub-rentetan yang dipadankan dapat diketahui dengannya. Objek ini adalah susunan khas dengan kaedah. Jenis objek match_results adalah cmatch (untuk literal string).

Memperoleh Pertandingan

Pertimbangkan kod berikut:

charhlm[] = 'Wanita yang anda cari!';

cmatch m;

sekiranya (regex_search(hlm,m,regex('w.m.n')))

kos<<m[0] <<endl;

Rentetan sasaran mempunyai kata wanita. Hasilnya adalah wanita ’, yang sesuai dengan regex, w.m.n. Pada indeks sifar, susunan khas memegang satu-satunya pertandingan, iaitu wanita.

Dengan pilihan kelas, hanya sub-string pertama yang terdapat dalam sasaran, yang dihantar ke array khas. Kod berikut menggambarkan ini:

cmatch m;

sekiranya (regex_search('Tikus, kucing, kelawar!',m,regex('[bcr] pada')))

kos<<m[0] <<endl;

kos<<m[1] <<endl;

kos<<m[2] <<endl;

Keluarannya adalah tikus dari indeks sifar. m [1] dan m [2] kosong.

Dengan alternatif, hanya sub-string pertama yang terdapat dalam sasaran, yang dihantar ke array khas. Kod berikut menggambarkan ini:

sekiranya (regex_search('Arnab, kambing, babi!',m,regex('kambing | arnab | babi')))

kos<<m[0] <<endl;

kos<<m[1] <<endl;

kos<<m[2] <<endl;

Hasilnya adalah arnab dari indeks sifar. m [1] dan m [2] kosong.

Pengumpulan

Apabila kumpulan terlibat, corak lengkap yang dipadankan, masuk ke sel sifar dari array khas. Sub-rentetan seterusnya yang dijumpai masuk ke sel 1; sub-string berikut, masuk ke sel 2; dan sebagainya. Kod berikut menggambarkan ini:

sekiranya (regex_search('Penjual buku terbaik hari ini!',m,regex('buku ((sel) (ler))')))

kos<<m[0] <<endl;

kos<<m[1] <<endl;

kos<<m[2] <<endl;

kos<<m[3] <<endl;

Keluarannya adalah:

penjual buku

penjual

sel

membaca

Perhatikan bahawa kumpulan (penjual) hadir sebelum kumpulan (sel).

Kedudukan Pertandingan

Posisi padanan untuk setiap sub-string dalam array cmatch dapat diketahui. Pengiraan bermula dari watak pertama rentetan sasaran, pada kedudukan sifar. Kod berikut menggambarkan ini:

cmatch m;

sekiranya (regex_search('Penjual buku terbaik hari ini!',m,regex('buku ((sel) (ler))')))

kos<<m[0] << '->' <<m.kedudukan(0) <<endl;

kos<<m[1] << '->' <<m.kedudukan(1) <<endl;

kos<<m[2] << '->' <<m.kedudukan(2) <<endl;

kos<<m[3] << '->' <<m.kedudukan(3) <<endl;

Perhatikan penggunaan properti kedudukan, dengan indeks sel, sebagai argumen. Keluarannya adalah:

penjual buku->5

penjual->9

sel->9

membaca->12

Cari dan Ganti

Kata atau frasa baru boleh menggantikan padanan. Fungsi regex_replace () digunakan untuk ini. Namun, kali ini, rentetan tempat penggantian berlaku adalah objek rentetan, bukan string literal. Jadi, perpustakaan rentetan mesti dimasukkan ke dalam program. Ilustrasi:

#sertakan

#sertakan

#sertakan

menggunakan namespace std;

intutama()
{
tali tali= 'Di sini, datang lelaki saya. Di sana lelaki anda. ';
rentetan newStr=regex_replace(hlm,regex('lelaki'), 'wanita');
kos<<baruStr<<endl;

kembali 0;
}

Fungsi regex_replace (), seperti dikodkan di sini, menggantikan semua padanan. Argumen pertama fungsi adalah sasaran, yang kedua adalah objek regex, dan yang ketiga adalah tali gantian. Fungsi mengembalikan rentetan baru, yang merupakan sasaran tetapi mempunyai penggantian. Keluarannya adalah:

Inilah wanita saya. Di sana pergi wanita anda.

Kesimpulannya

Ungkapan biasa menggunakan corak untuk memadankan substring dalam rentetan urutan sasaran. Corak mempunyai metakarakter. Fungsi yang biasa digunakan untuk ungkapan biasa C ++, adalah: regex_search (), regex_match () dan regex_replace (). Regex adalah corak dalam petikan ganda. Walau bagaimanapun, fungsi ini mengambil objek regex sebagai argumen dan bukan hanya regex. Regex mesti dibuat menjadi objek regex sebelum fungsi-fungsi ini dapat menggunakannya.