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的函数,请参阅
试试看。它能修复您的代码吗?您能提供预期的输出吗?匹配您知道的符号是没有意义的,除非您需要用它拆分,或者说,找到它的位置。@Stribizevterminate在抛出“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");