首頁 >後端開發 >C++ >如何使用 C 的 `std::regex` 有效率地從字串中提取多個單字?

如何使用 C 的 `std::regex` 有效率地從字串中提取多個單字?

Barbara Streisand
Barbara Streisand原創
2024-12-15 08:17:16450瀏覽

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

使用std::regex 匹配多個結果

使用std::regex 匹配多個結果可以是提取多個片段的便捷方法在單一操作中從字串中獲取資料。但是,提供的正規表示式「(bS*b){0,}」不適合用於匹配字串「first Second Third Fourth」中的每個單字。

解:

原始正規表示式的問題是量詞 {0,} 符合零次或多次,這使得模式可以符合空字串。相反,應使用匹配一次或多次的量詞,例如“{1,}”或“”。

此外,要匹配字串中的每個單詞,必須重複應用正規表達式,每次從上一次匹配之後的位置開始搜尋。這可以使用 regex_search 迭代字串的循環來實現。

修訂的程式碼:

這裡是實作必要變更的修訂程式碼:

#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;
}

此程式碼迭代地將正規表示式套用到字串,並輸出用空格分隔的每個符合單字。輸出將是:

first second third forth

以上是如何使用 C 的 `std::regex` 有效率地從字串中提取多個單字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn