簡體   English   中英

C ++ Boost :: regex幫助

[英]Help with C++ Boost::regex

我正在嘗試使用C ++中的Boost :: regex獲取字符串中的所有單詞。

這是我的意見:

“您好|網絡-bla bla hoho”

使用此代碼:

      regex rgx("[a-z]+",boost::regex::perl|boost::regex::icase);

      regex_search(input, result, rgx);

       for(unsigned int j=0; j<result.size(); ++j)
       {
         cout << result[j] << endl;
       }

我只得到第一個單詞“ Hello”。我的代碼有什么問題? result.size()返回1。

謝謝。

regex_search只找到第一個匹配項。 要遍歷所有匹配項,請使用regex_iterator

嘗試rgx("(?:(\\\\w+)\\\\W+)+"); 作為您的正則表達式。 ?:將開始一個非標記組,由匹配項結束)+將匹配字符串中的單詞1次或更多次(\\\\w+)將匹配alpha,數字和下划線1次或更多次作為標記組,即在result [i] \\\\W+中返回給您的典型單詞(如字符)將匹配一個或多個連續的非單詞字符,即空格,|,-等。

您僅在搜索字母字符,而不是空格,豎線或連字符。 regex_search()可能僅返回第一個匹配項。

您將需要捕獲由空格或字符串邊界限制的任何一組[az]+ (或其他用於匹配“單詞”的正則表達式)。 您可以嘗試這樣的事情:

^(\s*.+\s*)+$

無論如何,這並不是一個真正的boost :: regex問題,而僅僅是一個regex問題。 使用perl或bash shell(或任何數量的Web工具)確定正則表達式,然后在代碼中使用。

也許您可以嘗試使用以下正則表達式"(?:([az]+)\\\\b\\\\s*)+" 重復捕獲

要匹配單詞,請嘗試以下正則表達式:

regex rgx("\\<[a-z]+\\>",boost::regex::perl|boost::regex::icase);

根據文檔,在Perl各種Boost regex匹配中, \\<表示單詞的開頭, \\>表示單詞的結尾。

恐怕其他人必須解釋如何重復比賽。 Boost文檔使我的大腦受傷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM