Memadankan Berbilang Keputusan dengan std::regex
Memadankan berbilang hasil menggunakan std::regex boleh menjadi cara yang mudah untuk mengekstrak berbilang keping data daripada rentetan dalam satu operasi. Walau bagaimanapun, ungkapan biasa yang disediakan "(bS*b){0,}" tidak sesuai untuk memadankan setiap perkataan dalam rentetan "first second third forth".
Penyelesaian:
Isu dengan ungkapan biasa asal ialah pengkuantiti {0,} sepadan dengan sifar atau lebih masa, yang membolehkan corak sepadan dengan rentetan kosong. Sebaliknya, pengkuantiti yang sepadan sekali atau lebih kali, seperti "{1,}" atau " ", harus digunakan.
Selain itu, untuk memadankan setiap perkataan dalam rentetan, ungkapan biasa mesti digunakan berulang kali , mencari setiap kali dari kedudukan selepas perlawanan sebelumnya. Ini boleh dicapai menggunakan gelung dengan regex_search berulang melalui rentetan.
Kod Disemak:
Berikut ialah kod yang disemak yang melaksanakan perubahan yang diperlukan:
#include <iostream> #include <string> #include <regex> using namespace std; int main() { regex exp("(\b\S*\b)+"); smatch res; string str = "first second third forth"; string::const_iterator searchStart(str.cbegin()); while (regex_search(searchStart, str.cend(), res, exp)) { cout << (searchStart == str.cbegin() ? "" : " ") << res[0]; searchStart = res.suffix().first; } cout << endl; }
Kod ini secara berulang menggunakan ungkapan biasa pada rentetan dan mengeluarkan setiap perkataan sepadan yang dipisahkan oleh ruang. Outputnya ialah:
first second third forth
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Berbilang Perkataan dengan Cekap daripada Rentetan Menggunakan C \'s `std::regex`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!