首頁 > 後端開發 > C++ > 如何使用 C 的 std::regex 從字串中高效地提取多個正規表示式匹配項?

如何使用 C 的 std::regex 從字串中高效地提取多個正規表示式匹配項?

Linda Hamilton
發布: 2024-11-29 21:23:11
原創
413 人瀏覽過

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

使用std::regex 匹配多個正規表示式結果

可以使用std 來匹配字串中正規表示式模式的多次出現: :正規表示式庫。考慮這樣一個場景,我們希望在一次操作中從字串「first Second Third Fourth」中提取每個單字。

最初嘗試使用「(bS*b){0,}」並沒有得到所需的輸出,因為重複運算子{0,} 匹配零個或多個匹配項(包括無匹配項) ,從而導致空匹配。

為了解決此問題,我們可以採用一種稱為延遲迭代的技術。這涉及在執行正則表達式搜尋時迭代字串。以下是一個範例程式碼:

#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;
}
登入後複製

在此程式碼中,我們使用 searchStart 循環遍歷字串,它表示下一個潛在匹配的起點。每次成功匹配後,searchStart 都會更新到匹配子字串的末尾。這使我們能夠繼續搜尋後續匹配項,直到處理完整個字串。此程式碼的輸出為:

first second third forth
登入後複製

以上是如何使用 C 的 std::regex 從字串中高效地提取多個正規表示式匹配項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板