Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memadankan Semua Perkataan dalam Rentetan Menggunakan C \'s std::regex?
Memadankan Berbilang Keputusan dengan std::regex
Artikel ini membincangkan senario di mana pengguna cuba memadankan setiap perkataan dalam rentetan tertentu menggunakan enjin regex perpustakaan standard C (std::regex). Pengguna menggunakan corak regex "(bS*b)" untuk mencapai ini, tetapi menghadapi gelagat yang tidak dijangka.
Masalahnya
Corak regex awal yang disediakan, "( bS*b)", merangkum perkataan yang dibatasi oleh sempadan perkataan (b) dan aksara bukan ruang putih (S). Walau bagaimanapun, apabila digabungkan dengan fungsi regex_search, corak ini gagal mengambil kira berbilang padanan yang berpotensi dalam rentetan input.
Penyelesaian
Untuk menangani isu ini, ia adalah diperlukan untuk mengulangi rentetan input sambil terus menggunakan regex_search. Ini memastikan semua perlawanan dapat dikesan dan ditangkap. Kod yang diubah suai di bawah menunjukkan pendekatan ini:
{ 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; }
Dalam kod yang disemak ini, iterator, searchStart, dimulakan ke permulaan rentetan input. Fungsi regex_search dipanggil secara berulang, dengan searchStart berfungsi sebagai kedudukan permulaan carian. Jika padanan ditemui, padanan dicetak dan searchStart dilaraskan kepada kedudukan berikutan teks yang dipadankan. Proses ini berterusan sehingga tiada lagi padanan ditemui.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memadankan Semua Perkataan dalam Rentetan Menggunakan C \'s std::regex?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!