Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengeluarkan Berbilang Perkataan Padanan dengan Cekap daripada Rentetan Menggunakan std::regex?
Memadankan Berbilang Keputusan dengan std::regex: Penyelesaian Berkesan
Menghadapi kesukaran dalam mengekstrak berbilang perkataan yang dipadankan daripada rentetan menggunakan std:: regex? Salah tanggapan biasa ialah menggunakan corak "(bS*b){0,}" untuk memadankan perkataan dalam satu operasi. Walau bagaimanapun, pendekatan ini gagal disebabkan oleh pengkuantiti pilihan {0,} dalam corak.
Mengatasi Cabaran
Untuk menangani isu ini dan berjaya memadankan berbilang hasil menggunakan std::regex, adalah penting untuk menahan diri daripada menggunakan pengkuantiti pilihan. Sebaliknya, pertimbangkan kod berikut:
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;
Memahami Penyelesaian
Pendekatan yang dikemas kini ini melibatkan lelaran pada rentetan input semasa melakukan regex_search berulang kali. Ia memulakan kedudukan permulaan carian dalam rentetan dan meneruskan corak padanan sehingga tiada padanan selanjutnya ditemui. Setiap perlawanan yang berjaya mengemas kini kedudukan mula carian ke kedudukan serta-merta selepas perkataan yang dipadankan.
Faedah Pendekatan Ini
Penyelesaian yang dioptimumkan ini menghapuskan keperluan untuk menggunakan kumpulan penangkapan. Ia lebih cekap dan memastikan semua perkataan dalam rentetan input diekstrak dan dipisahkan dengan ruang dalam output.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Berbilang Perkataan Padanan dengan Cekap daripada Rentetan Menggunakan std::regex?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!