在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。 以及调用时出现的模块:
答案 0 :(得分:1)
您希望两个字符的序列进入正则表达式,即一个反斜杠和一个s
。但你写了
string regex_str = "<.*/((\s)*)>";
你的代码中的。这意味着您要添加一个转义字符(这是非法的,因为字符串中不允许\s
),这不是您想要的。你需要像这样逃避反斜杠:
string regex_str = "<.*/((\\s)*)>";
// ^^ note two backslashes
这样,您的字符串regex_str
将按预期包含一个反斜杠。