C++ 使用C+中的正则表达式读取空格、新行和制表符+;

C++ 使用C+中的正则表达式读取空格、新行和制表符+;,c++,regex,C++,Regex,我试图捕获空格\s、行尾'\n'、'\r'、选项卡'\t',但没有成功 以下是我尝试过的: #include <iostream> #include <regex> int main() { std::regex s ("\\s(.*)"); std::regex n ("\\n(.*)"); std::regex r ("\\r(.*)"); std::regex t ("\\t(.*)"); const char str[]=" subject \rsubject

我试图捕获空格
\s
、行尾
'\n'
'\r'
、选项卡
'\t'
,但没有成功

以下是我尝试过的:

#include <iostream>
#include <regex>

int main()
{
std::regex s ("\\s(.*)");
std::regex n ("\\n(.*)");
std::regex r ("\\r(.*)");
std::regex t ("\\t(.*)");
const char str[]=" subject \rsubject \nsubject \tsubject";
std::cmatch cmS;
std::cmatch cmN;
std::cmatch cmR;
std::cmatch cmT;
 if (std::regex_match (str, cmS,s))
     for (unsigned i=0; i<cmS.size(); ++i) {
         std::cout << "[" << cmS[i] << "] ";
     }
 if (std::regex_match (str, cmN,n))
     for (unsigned i=0; i<cmN.size(); ++i) {
         std::cout << "[" << cmN[i] << "] ";
     }
 if (std::regex_match (str, cmR,r))
     for (unsigned i=0; i<cmR.size(); ++i) {
         std::cout << "[" << cmR[i] << "] ";
     }

 if (std::regex_match (str, cmT,t))
     for (unsigned i=0; i<cmT.size(); ++i) {
         std::cout << "[" << cmT[i] << "] ";
     }

return 0;
}
#包括
#包括
int main()
{
std::regex s(“\\s(.*)”;
std::regex n(\\n(.*);
std::regex r(“\\r(.*)”;
std::regex t(“\\t(.*)”;
const char str[]=“subject\rsubject\nsubject\tsubject”;
std::cmatch-cmS;
std::cmatch-cmN;
std::cmatch-cmR;
std::cmatch-cmT;
if(std::regex_匹配(str、cmS、s))

对于(unsigned i=0;i如果您只需要匹配空白,那么我认为您无需添加
(*)

请尝试删除每个语句中的(.*)。您的新语句现在应该如下所示

std::regex s ("\\s"); 
std::regex n ("\\n"); 
std::regex r ("\\r");
std::regex t ("\\t");

要启用regex,您需要安装gcc4.9.0或更高版本,因为在以前的编译版本中regex模块不起作用

接下来,您需要使用
regex\u search
而不是
regex\u match
,因为后者需要完整的字符串匹配,并且您正在查找子字符串

请参见
regex\u match
说明:

整个目标序列必须与正则表达式匹配,此函数才能返回true(即,在匹配之前或之后没有任何附加字符)。有关匹配仅为序列一部分时返回true的函数,请参阅


试试看。它能修复您的代码吗?您能提供预期的输出吗?匹配您知道的符号是没有意义的,除非您需要用它拆分,或者说,找到它的位置。@Stribizev
terminate在抛出“std::regex_error”what()的实例后调用:regex_error
。当创建第一个regex模式时,应用程序将通过regex库的此输出终止。您的库版本是什么?更新到GCC 4.9.0或更高版本。它是GCC 4.8.1。稍后我将更新到4.9.0,并报告它是否工作。我正在与一个在不同机器上工作但不是我的regex进行斗争。然后我意识到我使用的是4.8。不知怎的,它编译了,但没有返回预期的输出。+1
std::regex s ("\\s"); 
std::regex n ("\\n"); 
std::regex r ("\\r");
std::regex t ("\\t");