Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengekstrak Berbilang Padanan Regex dengan Cekap daripada String Menggunakan C \'s std::regex?

Bagaimanakah Saya Boleh Mengekstrak Berbilang Padanan Regex dengan Cekap daripada String Menggunakan C \'s std::regex?

Linda Hamilton
Lepaskan: 2024-11-29 21:23:11
asal
412 orang telah melayarinya

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

Memadankan Berbilang Hasil Regex dengan std::regex

Memadankan berbilang kejadian corak ungkapan biasa dalam rentetan boleh dicapai menggunakan std: : perpustakaan regex. Pertimbangkan senario di mana kita ingin mengekstrak setiap perkataan daripada rentetan "first second second third forth" dalam satu operasi.

Percubaan awal untuk menggunakan "(bS*b){0,}" tidak menghasilkan output yang diingini kerana pengendali ulangan {0,} sepadan dengan sifar atau lebih kejadian, termasuk tiada, membawa kepada padanan kosong.

Untuk menangani isu ini, kami boleh menggunakan teknik yang dipanggil lelaran malas. Ini melibatkan lelaran pada rentetan semasa melakukan carian regex. Berikut ialah contoh kod:

#include <iostream>
#include <string>
#include <regex>

int main() {
    std::regex exp("(\b\S*\b)");
    std::smatch res;
    std::string str = "first second third forth";

    std::string::const_iterator searchStart(str.cbegin());
    while (std::regex_search(searchStart, str.cend(), res, exp)) {
        std::cout << (searchStart == str.cbegin() ? "" : " ") << res[0];
        searchStart = res.suffix().first;
    }
    std::cout << std::endl;
}
Salin selepas log masuk

Dalam kod ini, kami melingkari rentetan menggunakan searchStart, yang mewakili titik permulaan pada perlawanan berpotensi seterusnya. Selepas setiap perlawanan yang berjaya, searchStart dikemas kini ke penghujung subrentetan yang dipadankan. Ini membolehkan kami terus mencari padanan seterusnya sehingga keseluruhan rentetan telah diproses. Output kod ini ialah:

first second third forth
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekstrak Berbilang Padanan Regex dengan Cekap daripada String Menggunakan C \'s std::regex?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan