Memadankan Berbilang Hasil Regex dengan std::regex
Memadankan berbilang kejadian corak ungkapan biasa dalam rentetan boleh dicapai menggunakan std: : perpustakaan regex. Pertimbangkan senario di mana kita ingin mengekstrak setiap perkataan daripada rentetan "first second second third forth" dalam satu operasi.
Percubaan awal untuk menggunakan "(bS*b){0,}" tidak menghasilkan output yang diingini kerana pengendali ulangan {0,} sepadan dengan sifar atau lebih kejadian, termasuk tiada, membawa kepada padanan kosong.
Untuk menangani isu ini, kami boleh menggunakan teknik yang dipanggil lelaran malas. Ini melibatkan lelaran pada rentetan semasa melakukan carian regex. Berikut ialah contoh kod:
#include <iostream> #include <string> #include <regex> int main() { std::regex exp("(\b\S*\b)"); std::smatch res; std::string str = "first second third forth"; std::string::const_iterator searchStart(str.cbegin()); while (std::regex_search(searchStart, str.cend(), res, exp)) { std::cout << (searchStart == str.cbegin() ? "" : " ") << res[0]; searchStart = res.suffix().first; } std::cout << std::endl; }
Dalam kod ini, kami melingkari rentetan menggunakan searchStart, yang mewakili titik permulaan pada perlawanan berpotensi seterusnya. Selepas setiap perlawanan yang berjaya, searchStart dikemas kini ke penghujung subrentetan yang dipadankan. Ini membolehkan kami terus mencari padanan seterusnya sehingga keseluruhan rentetan telah diproses. Output kod ini ialah:
first second third forth
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekstrak Berbilang Padanan Regex dengan Cekap daripada String Menggunakan C \'s std::regex?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!