[英]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.