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:
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:
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!