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

Bagaimanakah Saya Boleh Mengeluarkan Berbilang Perkataan dengan Cekap daripada Rentetan Menggunakan C \'s `std::regex`?

Barbara Streisand
Barbara Streisandasal
2024-12-15 08:17:16450semak imbas

How Can I Efficiently Extract Multiple Words from a String Using C  's `std::regex`?

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!

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