我用Google搜索但仍无法找到错误。
为什么以下代码会打印false
,我期待true
?
#include <iostream>
#include <regex>
using namespace std;
int main()
{
std::string in("15\n");
std::regex r("[1-9]+[0-9]*\\n",
std::regex_constants::extended);
std::cout << std::boolalpha;
std::cout << std::regex_match(in, r) << std::endl;
}
未提供使用regex_search
的选项。
答案 0 :(得分:3)
&#34; \ n&#34;之前有一个额外的斜杠。在你的正则表达式。代码打印true
只删除了斜杠。
#include <iostream>
#include <regex>
using namespace std;
int main()
{
std::string in("15\n");
std::regex r("[1-9]+[0-9]*\n",
std::regex_constants::extended);
std::cout << std::boolalpha;
std::cout << std::regex_match(in, r) << std::endl;
}
编辑:@rici解释了为什么这是评论中的问题:
Posix标准扩展正则表达式(使用
std::regex_constants::extended
选择)不识别C-escape序列,例如\n
。请参阅Posix base definitions 9.4.2:&#34;前缀为(&#39; \&#39;)的普通字符的解释未定义。&#34;