Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengeluarkan Berbilang Perkataan Padanan dengan Cekap daripada Rentetan Menggunakan std::regex?

Bagaimanakah Saya Boleh Mengeluarkan Berbilang Perkataan Padanan dengan Cekap daripada Rentetan Menggunakan std::regex?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-30 13:55:14201semak imbas

How Can I Efficiently Extract Multiple Matching Words from a String Using 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn