Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;正则表达式匹配没有标点的单词_C++_Regex_Tr1 - Fatal编程技术网

C++ C++;正则表达式匹配没有标点的单词

C++ C++;正则表达式匹配没有标点的单词,c++,regex,tr1,C++,Regex,Tr1,我找了,什么也没找到。为了不让我浪费更多的时间去寻找答案对其他人来说是显而易见的机会,我在这里发问。到目前为止,唯一有用的网站是这个网站:但样本太简单了。我正在使用VisualStudio2010 #include <regex> [...] string seq = "Some words. And... some punctuation."; regex rgx("\w"); smatch result; regex_search(seq, result, rgx); f

我找了,什么也没找到。为了不让我浪费更多的时间去寻找答案对其他人来说是显而易见的机会,我在这里发问。到目前为止,唯一有用的网站是这个网站:但样本太简单了。我正在使用VisualStudio2010

#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;
}
#包括
[...]
string seq=“一些单词。还有……一些标点符号。”;
正则表达式rgx(“\w”);
smatch结果;
正则表达式搜索(seq,result,rgx);
对于(size_t i=0;i请尝试以下方法:

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;
}
string seq=“一些单词和……一些标点符号。”;
正则表达式rgx(“\\w+”);
regex_迭代器it(seq.begin()、seq.end()、rgx);
regex_迭代器end;
for(;it!=end;++it)
{
这里有几件事

首先,您的正则表达式字符串需要有<代码> \/COD>转义。毕竟它仍然是C++字符串。

regex rgx("\\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";
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
string seq=“一些单词。还有……一些标点符号。”;
正则表达式rgx(“\\w+”);
对于(sregex_迭代器it(seq.begin(),seq.end(),rgx),it_end;it!=it_end;++it)

我不能责怪你没有把这件事做好。我所看到的关于这件事的文档打击很大。我完全忘记了仍然需要摆脱束缚。发布的另一个答案是有效的,我唯一需要的是它忽略任何只有数字的单词。@Chris:@Eugene比我快,因为我花了额外的时间解释了更多的事情s&给你一个完整的工作示例:)@Chris:更棘手。我认为,你需要使用某种形式的前瞻。看看这里:在第二阶段丢弃“仅数字”结果可能更容易。正则表达式当然很简单,但还有很多其他方法(例如,
首先查找\u而不是
)@是的,我可能也会这么做。