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

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

Barbara Streisand
發布: 2024-12-15 08:17:16
原創
447 人瀏覽過

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中文網其他相關文章!

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