Rumah >pembangunan bahagian belakang >C++ >Menghuraikan teks menggunakan ungkapan biasa dalam C++

Menghuraikan teks menggunakan ungkapan biasa dalam C++

PHPz
PHPzasal
2023-08-22 14:58:431058semak imbas

Menghuraikan teks menggunakan ungkapan biasa dalam C++

Menghuraikan teks menggunakan ungkapan biasa dalam C++

Ekspresi biasa ialah alat yang berkuasa dan fleksibel untuk memadankan dan mencari corak teks. Dalam C++ kita boleh menggunakan perpustakaan ungkapan biasa untuk menghuraikan teks.

Terdapat dua pilihan utama untuk perpustakaan ekspresi biasa dalam C++: std::regex dan Boost.Regex. Kedua-dua perpustakaan menyediakan antara muka dan fungsi yang serupa. Walau bagaimanapun, kerana ia dilaksanakan secara berbeza, mungkin terdapat perbezaan prestasi dalam beberapa kes. Boost.Regex biasanya dianggap sebagai pilihan yang lebih pantas dan tepat, tetapi ia juga memerlukan penggunaan perpustakaan Boost.

Dalam artikel ini, kami akan memperkenalkan cara menggunakan perpustakaan std::regex untuk menghuraikan teks dalam C++. Kami akan menunjukkan melalui beberapa contoh cara memadankan dan mengekstrak teks menggunakan sintaks ungkapan biasa yang berbeza.

Contoh 1: Padankan teks asas

Dalam contoh ini, kami akan memadankan rentetan yang mengandungi "hello".

#include <iostream>
#include <regex>
 
int main() {
    std::string text = "hello world!";
    std::regex pattern("hello");
 
    if (std::regex_search(text, pattern)) {
        std::cout << "Match found!" << std::endl;
    } else {
        std::cout << "Match not found." << std::endl;
    }
 
    return 0;
}

Atur cara mudah ini menggunakan fungsi std::regex_search() untuk mencari sama ada rentetan "hello" wujud dalam teks. Jika padanan ditemui, program akan mengeluarkan "Match found!", jika tidak, ia akan mengeluarkan "Match not found.". Ambil perhatian bahawa kami menggunakan kelas std::string dan std::regex dan lulus ungkapan biasa sebagai rentetan kepada objek regex.

Contoh 2: Menggunakan aksara meta

Karakter meta dalam ungkapan biasa merujuk kepada aksara dengan makna istimewa. Berikut ialah beberapa aksara meta yang paling biasa digunakan dan maknanya:

  • Padan dengan mana-mana watak.
  • ^ sepadan dengan permulaan rentetan.
  • $ sepadan dengan hujung rentetan.
  • d sepadan dengan nombor.
  • w Memadankan aksara perkataan (huruf, nombor atau garis bawah).
  • s sepadan dengan aksara ruang putih (ruang, tab, dll.).

Dalam contoh di bawah, kami akan memadankan mana-mana rentetan yang bermula dengan "hello".

#include <iostream>
#include <regex>
 
int main() {
    std::string text1 = "hello world!";
    std::string text2 = "world hello!";
    std::regex pattern("^hello");
 
    if (std::regex_search(text1, pattern)) {
        std::cout << "Match found in text1!" << std::endl;
    }
 
    if (std::regex_search(text2, pattern)) {
        std::cout << "Match found in text2!" << std::endl;
    }
 
    return 0;
}

Dalam contoh ini, kami menggunakan metacharacter "^" untuk memadankan rentetan bermula dengan "hello". Dalam teks pertama "hello world!", kedua-dua ungkapan biasa dan rentetan bermula dengan "hello", jadi program akan mengeluarkan "Match found in text1!". Dalam teks kedua "world hello!", ungkapan biasa tidak sepadan dengan permulaan rentetan, jadi program tidak mencetak apa-apa.

Contoh 3: Menggunakan pengkuantiti

Pengkuantiti dalam ungkapan biasa menyatakan bilangan padanan corak. Berikut ialah beberapa pengkuantiti yang paling biasa digunakan dan maknanya:

    • Padan dengan pola sebelumnya sifar atau lebih kali.
    • Padankan corak sebelumnya satu kali atau lebih.
  • ? Padan dengan pola sifar atau sekali.
  • {n} sepadan dengan corak sebelumnya tepat n kali.
  • {n,} sepadan dengan corak sebelumnya sekurang-kurangnya n kali.
  • {n,m} sepadan dengan corak sebelumnya sekurang-kurangnya n kali, tetapi tidak melebihi m kali.

Dalam contoh di bawah, kami akan menggunakan pengkuantiti "+" untuk memadankan satu atau lebih nombor.

#include <iostream>
#include <regex>
 
int main() {
    std::string text1 = "1234";
    std::string text2 = "a1234";
    std::regex pattern("\d+");
 
    if (std::regex_search(text1, pattern)) {
        std::cout << "Match found in text1!" << std::endl;
    }
 
    if (std::regex_search(text2, pattern)) {
        std::cout << "Match found in text2!" << std::endl;
    }
 
    return 0;
}

Dalam contoh ini, kami menggunakan ungkapan biasa "d+" untuk memadankan satu atau lebih nombor. Dalam teks pertama "1234", ungkapan biasa sepadan dengan keseluruhan rentetan, jadi program akan mengeluarkan "Padanan ditemui dalam teks1!". Dalam teks kedua "a1234", ungkapan biasa hanya sepadan dengan subrentetan angka "1234", jadi atur cara akan mengeluarkan "Padanan ditemui dalam teks2!".

Contoh 4: Menggunakan pengelompokan

Pengumpulan dalam ungkapan biasa membolehkan kita membahagikan corak kepada sub-corak dan hanya mempertimbangkan salah satu daripadanya apabila dipadankan. Pengelompokan dinyatakan menggunakan kurungan. Dalam contoh di bawah, kami akan memadankan rentetan yang mengandungi "hello" atau "world".

#include <iostream>
#include <regex>
 
int main() {
    std::string text1 = "hello";
    std::string text2 = "world";
    std::string text3 = "hello world!";
    std::regex pattern("(hello|world)");
 
    if (std::regex_search(text1, pattern)) {
        std::cout << "Match found in text1!" << std::endl;
    }
 
    if (std::regex_search(text2, pattern)) {
        std::cout << "Match found in text2!" << std::endl;
    }
 
    if (std::regex_search(text3, pattern)) {
        std::cout << "Match found in text3!" << std::endl;
    }
 
    return 0;
}

Dalam contoh ini, kami menggunakan ungkapan biasa "(hello|world)" untuk mengumpulkan "hello" dan "world" sebagai dua kumpulan. Dalam teks pertama "hello", ungkapan biasa hanya sepadan dengan kumpulan pertama, jadi program akan mengeluarkan "Padanan ditemui dalam teks1!". Dalam teks kedua "dunia", ungkapan biasa hanya sepadan dengan kumpulan kedua, jadi program akan mengeluarkan "Padanan ditemui dalam teks2!". Dalam teks ketiga "hello world!", ungkapan biasa sepadan dengan kumpulan pertama atau kedua, jadi program akan mengeluarkan "Match found in text3!".

Ringkasan

Dalam artikel ini, kami memperkenalkan cara menggunakan ungkapan biasa untuk menghuraikan teks dalam C++. Kami memperincikan beberapa sintaks ungkapan biasa yang paling biasa digunakan, termasuk aksara meta, pengkuantiti dan pengelompokan. Semoga contoh ini akan membantu anda memahami cara menggunakan ungkapan biasa untuk memproses data teks.

Atas ialah kandungan terperinci Menghuraikan teks menggunakan ungkapan biasa dalam C++. 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