C ++

Asas Ekspresi Biasa dalam C ++

Asas Ekspresi Biasa dalam 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". Jika memiliki kata lelaki, maka dia mungkin ingin mengubah 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 disebut regex. Oleh itu, program C ++ untuk menangani regex harus bermula dengan:

#sertakan
#sertakan
menggunakan ruang nama std;

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

Kandungan Artikel

  • Asas Ekspresi Biasa
  • Corak
  • Kelas Perwatakan
  • Tempat kosong yang sepadan
  • Tempoh (.) dalam Corak
  • Pengulangan Sepadan
  • Alternatif yang sepadan
  • Permulaan atau Akhir yang sepadan
  • Pengumpulan
  • The icase dan multiline regex_constants
  • Memadankan Keseluruhan Sasaran
  • Objek match_results
  • Kedudukan Pertandingan
  • Cari dan Ganti
  • Kesimpulannya

Asas Ekspresi Biasa

Regex

Rentetan seperti "Inilah lelaki saya."Di atas adalah urutan sasaran atau rentetan sasaran atau sekadar sasaran. "Man", 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" terletak di atas, ia dapat digantikan dengan "wanita".

Padanan Mudah

Program berikut menunjukkan bagaimana kata "man" dipadankan.

#sertakan
#sertakan
menggunakan ruang nama std;
int utama ()

reg regex ("lelaki");
if (regex_search ("Inilah lelaki saya.", reg))
cout << "matched" << endl;
yang lain
cout << "not matched" << endl;
pulangan 0;

Fungsi regex_search () kembali benar jika ada padanan dan kembali palsu jika tidak ada pertandingan. Di sini, fungsi mengambil dua argumen: yang pertama adalah rentetan sasaran, dan yang kedua adalah objek regex. Regex itu sendiri adalah "lelaki", 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 "man" 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");
if (regex_search ("Inilah hasil karya saya.", reg))
cout << "matched" << endl;
yang lain
cout << "not matched" << endl;

Tidak sesuai kerana "man" regex tidak dapat dijumpai di keseluruhan string 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, posisi tertentu dalam string sasaran akan sesuai dengan mana-mana watak kurung siku. Pertimbangkan sasaran berikut:

"Kucing itu 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 "kelelawar" atau "tikus" dimulai dengan 'c' atau 'b' atau 'r'. Segmen kod berikut menggambarkan ini:

reg regex ("[cbr] di");
if (regex_search ("Kucing ada di dalam bilik.", reg))
cout << "matched" << endl;
if (regex_search ("Kelelawar ada di dalam bilik.", reg))
cout << "matched" << endl;
if (regex_search ("Tikus itu ada di dalam bilik.", reg))
cout << "matched" << 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. Jika sasaran tidak memiliki 'c' atau 'b' atau 'r', diikuti oleh "at", tidak akan ada pertandingan.

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:

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

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

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

Kod berikut menghasilkan padanan:

char str [] = "ID6iE";
jika (regex_search (str, regex ("[a-z]")))
cout << "matched" << 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:

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

Perlawanan antara "ID [0-9] id" dan "ID2id". Selebihnya dari rentetan sasaran, "adalah ID", tidak sesuai dengan situasi ini.

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

Catatan: Kata hubung - adalah metakarakter hanya dalam tanda kurung persegi, menunjukkan julat. Ia 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:

jika (regex_search ("0123456789101112", regex ("[^ 0-9]"))))
cout << "matched" << endl;
yang lain
cout << "not matched" << 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:

jika (regex_search ("ABCDEFGHIJ", regex ("[^ 0-9]"))))
cout << "matched" << 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" sesuai dengan '\ n' dalam sasaran:

jika (regex_search ("Dari baris pertama.\ r \ nDari baris kedua.", regex (" \ n ")))
cout << "matched" << 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:

jika (regex_search ("one two", regex ("[\ t \ r \ n \ f]"))))
cout << "matched" << endl;

Memadankan mana-mana Watak Tanpa Ruang Putih

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

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

Tempoh (.) dalam Corak

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

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

Tidak ada hasil yang sesuai dalam kod berikut kerana targetnya adalah \ \ n ".

jika (regex_search ("\ n", regex (".")))
cout << "matched" << endl;
yang lain
cout << "not matched" << endl;

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

Pengulangan Sepadan

Watak atau sekumpulan watak boleh berlaku lebih dari sekali dalam rentetan sasaran. Corak dapat menandingi pengulangan ini. The metacharacters, ?, *, +, 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' 0 atau lebih kali, i.e., sebilangan kali
x +: bermaksud padanan 'x' 1 atau lebih kali, i.e., sekurang-kurangnya sekali
x? : bermaksud padanan 'x' 0 atau 1 kali
x n,: bermaksud padanan 'x' sekurang-kurangnya n atau lebih banyak kali. Perhatikan koma.
x n: padankan 'x' dengan tepat n kali
x n, m: padankan 'x' sekurang-kurangnya n kali, tetapi tidak lebih daripada m kali.

Metakarakter ini dipanggil pengukur.

Ilustrasi

*

* Sepadan dengan watak sebelumnya atau kumpulan sebelumnya, sifar atau lebih banyak kali. "O *" sesuai dengan 'o' dalam "anjing" rentetan sasaran. Ini juga cocok dengan "oo" dalam "buku" dan "mencari". Regex, “o *” sesuai dengan “boooo” dalam “The animal booooed.". Catatan: "o *" sesuai dengan "dig", di mana 'o' berlaku sifar (atau lebih) waktu.

+

+ Sepadan dengan watak sebelumnya atau kumpulan sebelumnya, 1 atau lebih kali. Bezakannya dengan sifar atau lebih banyak kali untuk *. Jadi regex, "e +" sesuai dengan 'e' di "eat", di mana 'e' berlaku satu kali. "E +" juga cocok dengan "ee" dalam "domba", di mana 'e' terjadi lebih dari satu kali. Catatan: “e +” tidak akan cocok dengan “dig” kerana dalam “dig”, “e” tidak terjadi setidaknya sekali.

?

The ? sepadan dengan watak sebelumnya atau kumpulan sebelumnya, 0 atau 1 kali (dan tidak lebih). Jadi, "e?"Sesuai dengan" dig "kerana 'e' berlaku dalam" menggali ", sifar. E?"Sesuai dengan" set "kerana 'e' terjadi pada" set ", satu kali. Catatan: “e?"Masih sepadan dengan" domba "; walaupun ada dua huruf "domba". Terdapat nuansa di sini - lihat kemudian.

n,

Ini sesuai dengan sekurang-kurangnya pengulangan berturut-turut watak sebelumnya atau kumpulan sebelumnya. Jadi regex, "e 2," sesuai dengan dua e di target, "domba", dan tiga e di target "sheeep". "E 2," tidak cocok dengan "set", karena "set" hanya memiliki satu 'e'.

n

Ini sepadan dengan pengulangan berturut-turut dari watak sebelumnya atau kumpulan sebelumnya. Jadi regex, "e 2" sesuai dengan dua e dalam sasaran, "domba". "E 2" tidak cocok dengan "set" karena "set" hanya memiliki satu 'e'. Baiklah, "e 2" sesuai dengan dua e, "sheeep". Terdapat nuansa di sini - lihat kemudian.

n, m

Ini sesuai dengan beberapa pengulangan berturut-turut dari watak sebelumnya atau kumpulan sebelumnya, di mana sahaja dari n hingga m, inklusif. Jadi, "e 1,3" tidak sepadan dengan "dig", yang tidak memiliki 'e'. Ini cocok dengan satu 'e' dalam 'set', dua 'e' di 'domba', tiga 'e' di 'sheeep', dan tiga 'e' di 'sheeeep'. Terdapat nuansa pada perlawanan terakhir - lihat kemudian.

Alternatif yang sepadan

Pertimbangkan rentetan sasaran berikut di komputer.

“Ladang ini mempunyai babi dengan ukuran yang berbeza."

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

char str [] = "Ladang ini mempunyai khinzir dengan pelbagai ukuran.";
jika (regex_search (str, regex ("kambing | arnab | babi")))
cout << "matched" << endl;
yang lain
cout << "not matched" << 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 posisi 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 posisi seterusnya dalam 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:

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

Tiada pencocokan berlaku dalam kod berikut:

jika (regex_search ("Yes, abc and def", regex ("^ abc")))
cout << "matched" << endl;
yang lain
cout << "not matched" << 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:

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

Tiada pencocokan berlaku dalam kod berikut:

jika (regex_search ("uvw and xyz final", regex ("xyz $")))
cout << "matched" << endl;
yang lain
cout << "not matched" << endl;

Di sini, "xyz" tidak berada di akhir sasaran.

Pengumpulan

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

"konsert (pemain piano)"

Kumpulan di sini adalah "pianis" 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, "pianis itu 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 di dalam komputer. Namun, minatnya adalah untuk mengetahui apakah "rak buku" atau "penjaga buku" ada dalam string sasaran apa pun yang ada di komputer. Dalam kes ini, regex-nya boleh menjadi:

"rak buku | penjaga buku."

Menggunakan gantian.

Perhatikan bahawa "buku", yang umum untuk kedua kata, telah ditaip dua kali, dalam dua kata 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 kata panjang. Telah digunakan untuk dua bahagian akhir dari dua perkataan panjang. C ++ memperlakukan kumpulan sebagai entiti. Jadi, C ++ akan mencari "rak" atau "penjaga" yang muncul sejurus selepas "buku". Keluaran kod berikut "dipadankan":

char str [] = "Perpustakaan mempunyai rak buku yang dikagumi.";
jika (regex_search (str, regex ("book (rak | penjaga)")))
cout << "matched" << endl;

"Rak buku" dan bukan "penjaga buku" telah dipadankan.

Ikon icase dan multiline regex_constants

ais

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

jika (regex_search ("Feedback", regex ("feed", regex :: icase)))
cout << "matched" << endl;

Keluarannya "dipadankan". Jadi "Maklum Balas" dengan huruf besar 'F' telah dipadankan dengan "umpan" dengan huruf kecil 'f'. "Regex :: icase" telah dibuat argumen kedua dari regex () konstruktor. Tanpa itu, pernyataan itu tidak akan menghasilkan padanan.

Multiline

Pertimbangkan kod berikut:

char str [] = "baris 1 \ nline 2 \ nline 3";
jika (regex_search (str, regex ("^).* $ ")))
cout << "matched" << endl;
yang lain
cout << "not matched" << 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 ialah rentetan multiline. Agar '.'Untuk menyamai watak barisan baru, "regex :: multiline" yang berterusan mesti dibuat, argumen kedua dari pembinaan regex (). Kod berikut menggambarkan ini:

char str [] = "baris 1 \ nline 2 \ nline 3";
jika (regex_search (str, regex ("^).* $ ", regex :: multiline)))
cout << "matched" << endl;
yang lain
cout << "not matched" << 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:

char str [] = "ketiga kedua pertama";
jika (regex_match (str, regex (".* kedua.* ")))
cout << "matched" << endl;

Ada pertandingan di sini. Namun, perhatikan bahawa regex sesuai dengan keseluruhan rentetan sasaran, dan rentetan sasaran tidak memiliki '\ 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:

char str [] = "Wanita yang anda cari!";
cmatch m;
jika (regex_search (str, m, regex ("w.m.n ")))
cout << m[0] << endl;

Rentetan sasaran mempunyai kata "wanita". Keluarannya 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;
jika (regex_search ("Tikus, kucing, kelawar!", m, regex (" [bcr] di ")))
cout << m[0] << endl;
cout << m[1] << endl;
cout << m[2] << endl;

Keluarannya adalah "tikus" dari sifar indeks. 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:

jika (regex_search ("Arnab, kambing, babi!", m, regex (" kambing | arnab | babi "))))
cout << m[0] << endl;
cout << m[1] << endl;
cout << m[2] << endl;

Hasilnya adalah "arnab" dari sifar indeks. 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 dalam sel 1; sub-string berikut, masuk ke sel 2; dan sebagainya. Kod berikut menggambarkan ini:

if (regex_search ("Penjual buku terbaik hari ini!", m, regex (" buku ((sel) (ler)) ")))
cout << m[0] << endl;
cout << m[1] << endl;
cout << m[2] << endl;
cout << m[3] << endl;

Keluarannya adalah:

penjual buku
penjual
sel
ler

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;
if (regex_search ("Penjual buku terbaik hari ini!", m, regex (" buku ((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;

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

penjual buku-> 5
penjual-> 9
sel-> 9
ler-> 12

Cari dan Ganti

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

#sertakan
#sertakan
#sertakan
menggunakan ruang nama std;
int utama ()

string str = "Di sini, datang lelaki saya. Di sana pergi lelaki anda.";
string newStr = regex_replace (str, regex ("lelaki"), "wanita");
cout << newStr << endl;
pulangan 0;

Fungsi regex_replace (), seperti dikodkan di sini, menggantikan semua perlawanan. 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 dijadikan objek regex sebelum fungsi-fungsi ini dapat menggunakannya.

WinMouse membolehkan anda menyesuaikan & meningkatkan pergerakan penunjuk tetikus pada PC Windows
Sekiranya anda ingin meningkatkan fungsi lalai penunjuk tetikus anda gunakan perisian percuma WinMouse. Ia menambah lebih banyak ciri untuk membantu a...
Butang klik kiri tetikus tidak berfungsi pada Windows 10
Sekiranya anda menggunakan tetikus khusus dengan komputer riba, atau komputer desktop anda tetapi butang klik kiri tetikus tidak berfungsi pada Window...
Kursor melompat atau bergerak secara rawak semasa menaip di Windows 10
Sekiranya anda mendapati kursor tetikus anda melompat atau bergerak sendiri, secara automatik, secara rawak semasa menaip komputer riba atau komputer ...