带有一个或多个空格的C ++ 11正则表达式

时间:2015-04-16 16:43:09

标签: c++ regex c++11

在C ++ 11中使用正则表达式,我试图检测以/>/ >结尾的单个HTML标记,例如<br/>或{{1} }。

使用Boost,我使用了这个正则表达式字符串:"<hr/ > 它工作正常,但C ++ 11正则表达式模块不接受它。

所以我尝试了这段代码:

"<.*/\\s*>"

2个问题:

1)它引发错误警告:

  

警告:未知的转义序列:&#39; \ s&#39; [默认启用]

2)它不起作用。

使用#include <regex> bool IsSingle(string sTag) { string regex_str = "<.*/((\s)*)>"; // \s* zero or more whitespaces regex reg1(regex_str, regex_constants::icase); bool bb = regex_search(sTag, reg1); return bb; } <br/>等sTag参数,函数返回0.

我做错了什么?

谢谢!

PS:使用C ++ 11和gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1)和Nebeans IDE 8.0.2。 以及调用时出现的模块:

包括

1 个答案:

答案 0 :(得分:1)

您希望两个字符的序列进入正则表达式,即一个反斜杠和一个s。但你写了

string regex_str = "<.*/((\s)*)>";
你的代码中的

。这意味着您要添加一个转义字符(这是非法的,因为字符串中不允许\s),这不是您想要的。你需要像这样逃避反斜杠:

string regex_str = "<.*/((\\s)*)>";
//                        ^^ note two backslashes

这样,您的字符串regex_str将按预期包含一个反斜杠。