C ++ Regex匹配没有标点符号的单词

时间:2011-01-28 06:22:05

标签: c++ regex tr1

我搜索过,找不到任何东西。为了不浪费我的时间来回答其他人明显的答案,我在这里问。到目前为止,只有一个有用的网站是这个:http://softwareramblings.com/2008/07/regular-expressions-in-c.html,但样本过于简单。我正在使用Visual Studio 2010。

#include <regex>

[...]

string seq = "Some words. And... some punctuation.";
regex rgx("\w");

smatch result;
regex_search(seq, result, rgx);

for(size_t i=0; i<result.size(); ++i){
    cout << result[i] << endl;
}

预期输出为:

一些
 也就是说
 和
 一些
 标点符号

感谢。

2 个答案:

答案 0 :(得分:5)

这里有一些事情。

首先,您的正则表达式字符串需要转义\。毕竟它仍然是一个C ++字符串。

regex rgx("\\w");

此外,正则表达式\w只匹配一个“单词字符”。如果要匹配整个单词,则需要使用:

regex rgx("\\w+");

最后,为了迭代所有可能的匹配,那么你需要使用迭代器。这是一个完整的工作示例:

#include <regex>
#include <string>
#include <iostream>
using namespace std;

int main()
{
    string seq = "Some words. And... some punctuation.";
    regex rgx("\\w+");

    for( sregex_iterator it(seq.begin(), seq.end(), rgx), it_end; it != it_end; ++it )
        cout << (*it)[0] << "\n";
}

答案 1 :(得分:1)

试试这个:

string seq = "Some words. And... some punctuation.";
regex rgx("(\\w+)");

regex_iterator<string::iterator> it(seq.begin(), seq.end(), rgx);
regex_iterator<string::iterator> end;

for (; it != end; ++it)
{
    cout << it->str() << endl;
}