2010-04-07 92 views
2

我試圖在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; 
     } 

我只得到了第一個字 「喂」 .. 什麼我的代碼錯了? result.size()返回1.

謝謝。

回答

5

regex_search只查找第一個匹配項。遍歷所有比賽,使用regex_iterator

0

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

0

您需要捕獲任何一組[a-z]+(或其他用於匹配「單詞」的正則表達式),由空格或字符串邊界約束。你可以嘗試這樣的事:

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

在任何情況下,這是不是真的一個boost ::正則表達式的問題,它只是一個正則表達式的問題。使用perl或bash shell(或任意數量的web工具)來確定你的正則表達式,然後在你的代碼中使用。

0

也許你可以嘗試使用repeated captures以下正則表達式"(?:([a-z]+)\\b\\s*)+"

0

要匹配的話,試試這個正則表達式:

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

根據該文檔,\<表示字的開始和\>表示字的Perl的結束多種Boost正則表達式匹配。

恐怕還有別人解釋如何迭代匹配。 Boost文檔使我的大腦受到傷害。

+0

同意Boost.Regex文檔相當糟糕 – Yacoby 2010-04-07 13:51:48

+0

ahum,它仍然是... – nus 2010-10-23 02:59:38

1

嘗試rgx("(?:(\\w+)\\W+)+");作爲您的正則表達式。 (?:將啓動一個非匹配組,由匹配)+完成,匹配字符串中的單詞1次或多次 (\\w+)將匹配字母,數字和下劃線1次或多次作爲標記組,即典型單詞[\\W+]將匹配一個或多個連續的非單詞字符,即空格,|, - 等