0

Boost::regex を使用して文を個々の単語に分割しようとしています。しかし、最後の単語を印刷していません。何が間違っているのですか?

コードは次のとおりです。

#include <iostream>
#include <boost/regex.hpp>
using namespace std;
using namespace boost;

int main() {
smatch matchResults;
regex whiteChars("(.*?)[\\s]");
string p = "This is a sentence";
for(string::const_iterator sit = p.begin(), sitend = p.end(); sit != sitend;)
{
    regex_search(sit, sitend, matchResults, whiteChars);
    if(matchResults[1].matched)
        cout << matchResults[1] << endl;
    sit = matchResults[0].second;
}
return 0;
}

Output: 
This 
is 
a
Expected Output: 
This 
is 
a
sentence
4

2 に答える 2

3

最後の単語の後に$and notが続く\\sため、現在の正規表現 -"(.*?)[\\s]"は一致しません。

これを試すことができます:

"(.*?)(?:\\s|$)"

またはさらに良いことに、これも機能する可能性があります。

([^\\s]*)  // Just get all the non-space characters. That is what you want
于 2013-02-18T22:53:39.303 に答える
0
std::regex rgx("\\s");
std::string p("This is a sentence");
std::regex_token_iterator current(p.begin(), p.end(), rgx, -1);
std::regex_token_iterator end;
while (current != end)
    std::cout << *current++ << '\n';

これは、Boost の正規表現でも機能するはずです。Boost の詳細について詳しくないので、そのコードは書いていません。

于 2013-02-19T12:30:16.127 に答える