Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ungkapan biasa dalam C++ dan teknik aplikasinya

Ungkapan biasa dalam C++ dan teknik aplikasinya

PHPz
PHPzasal
2023-08-22 08:28:441051semak imbas

Dalam pembangunan C++, ungkapan biasa ialah alat yang sangat berguna. Menggunakan ungkapan biasa, anda boleh melakukan operasi dengan mudah seperti padanan dan carian pada rentetan. Artikel ini akan memperkenalkan ungkapan biasa dalam C++ dan teknik aplikasinya untuk membantu pembaca menggunakan ungkapan biasa dengan lebih baik untuk menyelesaikan masalah pembangunan.

1. Pengenalan kepada ungkapan biasa

Ungkapan biasa ialah corak yang terdiri daripada set aksara, digunakan untuk memadankan rentetan dengan peraturan tertentu. Ungkapan biasa biasanya terdiri daripada metakarakter, kelayakan dan aksara. Antaranya, metacharacter mempunyai makna khas dan digunakan untuk mewakili jenis aksara, dan qualifier digunakan untuk menentukan bilangan kali watak muncul berulang kali. Watak boleh mewakili watak biasa atau watak istimewa.

Dalam C++, gunakan fail pengepala 8b2d503d09b38f6c300ed08e7e08a623 untuk melaksanakan fungsi ungkapan biasa. Berikut ialah beberapa aksara meta dan kelayakan yang biasa digunakan:

  1. Karakter meta:

Padan dengan mana-mana watak.
^ sepadan dengan permulaan rentetan.
$ sepadan dengan hujung rentetan.

  • Memadankan watak sebelumnya 0 kali atau lebih.
  • Memadankan watak sebelumnya 1 kali atau lebih.
    Padankan dengan watak sebelumnya 0 atau 1 kali.
    () digunakan untuk mengumpulkan.
    [] sepadan dengan mana-mana aksara dalam kurungan segi empat sama.
    {m,n} sepadan dengan watak sebelumnya yang muncul m hingga n kali.
    d sepadan dengan mana-mana aksara angka.
    D sepadan dengan mana-mana aksara bukan angka.
    w sepadan dengan mana-mana huruf, nombor dan aksara garis bawah.
    W sepadan dengan mana-mana aksara bukan huruf, nombor dan garis bawah.
  1. Kelayakan:
  • Memadankan watak sebelumnya 0 atau lebih kali.
  • Memadankan watak sebelumnya 1 kali atau lebih.
    Padankan dengan watak sebelumnya 0 atau 1 kali.
    {m,n} sepadan dengan watak sebelumnya yang muncul m hingga n kali.

2. Aplikasi ungkapan biasa

Ungkapan biasa boleh digunakan dalam banyak senario dalam C++, seperti:

  1. Padanan rentetan

Menggunakan ungkapan biasa boleh memadankan rentetan dengan peraturan tertentu dengan mudah. Contohnya, program contoh berikut akan memadankan semua aksara:

#include <iostream>
#include <regex>

using namespace std;

int main()
{
    regex reg("a");
    string str = "apple banana";
    sregex_iterator it(str.begin(), str.end(), reg);
    sregex_iterator end;
    while (it != end) {
        smatch match = *it;
        cout << match.str() << endl;
        it++;
    }
    return 0;
}
  1. Cari dan gantikan

Menggunakan ungkapan biasa, anda juga boleh mencari dan menggantikan kandungan dalam rentetan dengan mudah. Program contoh berikut akan menggantikan semua aksara dengan aksara b:

#include <iostream>
#include <regex>

using namespace std;

int main()
{
    regex reg("a");
    string str = "apple banana";
    string newstr = regex_replace(str, reg, "b");
    cout << newstr;
    return 0;
}
  1. Pengesahan borang

Dalam pembangunan laman web, selalunya perlu untuk mengesahkan borang yang diserahkan oleh pengguna untuk memastikan data input berada dalam format yang betul. Ungkapan biasa boleh mencapai fungsi ini dengan mudah. Contohnya, program contoh berikut akan menentukan sama ada input pengguna ialah alamat e-mel:

#include <iostream>
#include <regex>

using namespace std;

bool is_valid_email(string email)
{
    regex reg("\w+@(\w+\.)+[a-zA-Z]+");
    return regex_match(email, reg);
}

int main()
{
    string email1 = "hello@gmail.com";
    string email2 = "hello@gmail";
    cout << is_valid_email(email1) << endl;
    cout << is_valid_email(email2) << endl;
    return 0;
}
  1. Analisis log

Semasa operasi sistem, sejumlah besar maklumat log akan dijana. Ungkapan biasa memudahkan untuk menganalisis mesej log ini. Sebagai contoh, program contoh berikut akan mengeluarkan semua baris dalam log yang mengandungi rentetan ralat:

#include <iostream>
#include <fstream>
#include <regex>

using namespace std;

int main()
{
    ifstream fin("log.txt");
    regex reg(".*error.*");
    string line;
    while (getline(fin, line)) {
        if (regex_match(line, reg)) {
            cout << line << endl;
        }
    }
    fin.close();
    return 0;
}

3. Petua

Apabila menggunakan ungkapan biasa, anda perlu memberi perhatian kepada perkara berikut:

  1. Beri perhatian kepada escape characters

Dalam C++, backslash () ialah watak khas yang digunakan untuk melarikan diri daripada watak lain. Untuk memadankan aksara garisan belakang sebenar, gunakan dua aksara garisan belakang () dalam ungkapan biasa. Contohnya, untuk memadankan garis miring ke belakang sebenar, gunakan ungkapan biasa "".

  1. Beri perhatian kepada susunan padanan

Susunan padanan dalam ungkapan biasa biasanya dari kiri ke kanan. Oleh itu, perhatikan susunan padanan untuk memastikan rentetan yang betul dipadankan.

  1. Cuba gunakan padanan dan regex_match

Dalam C++, terdapat dua fungsi yang boleh digunakan untuk memadankan rentetan: padanan dan regex_match. Perbezaannya ialah fungsi padanan hanya boleh memadankan bahagian awalan rentetan, manakala fungsi regex_match boleh memadankan keseluruhan rentetan. Oleh itu, untuk kebanyakan kes, adalah disyorkan untuk menggunakan fungsi regex_match.

  1. Cuba gunakan sregex_iterator

Apabila melakukan padanan rentetan, adalah disyorkan untuk menggunakan sregex_iterator untuk melintasi hasil padanan. Iterator ini boleh menyimpan semua hasil yang sepadan dalam bekas untuk memudahkan operasi seterusnya.

Ringkasan

Artikel ini memperkenalkan ungkapan biasa dalam C++ dan teknik aplikasinya. Menggunakan ungkapan biasa, anda boleh melakukan operasi dengan mudah seperti padanan dan carian pada rentetan. Pembaca boleh menggunakan ungkapan biasa dengan lebih baik untuk menyelesaikan masalah pembangunan berdasarkan keperluan sebenar mereka, digabungkan dengan kod sampel dalam artikel ini.

Atas ialah kandungan terperinci Ungkapan biasa dalam C++ dan teknik aplikasinya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn