为什么正则 [\s\S]+ 不支持

aj3423 2013-05-10 07:45:07
代码如下
#include <iostream>
#include <string>
#include <regex>
using namespace std;


int main() {
string s = "aa bb";
regex pattern("aa[\\s\\S]+bb");
smatch m;

while(regex_search(s, m, pattern)) {//为什么匹配不到
cout << m[0] << endl;
s = m.suffix().str();
}
}

...全文
140 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aj3423 2013-05-11
  • 打赏
  • 举报
回复
\s 空白字符,这里用来匹配空格
regex pattern("aa[\\s]+bb");
这样是可以匹配 "aa bb" 的, []里面的表示任意取一, 理论上如果[\\s]+可以匹配,那么[\\s任意东西]+也可以匹配, 不知道为什么加了个 \S 就不行了, 如果说 \S 在这里代表 b, 那为什么aa[\\sb]+bb可以匹配
youyou1912 2013-05-11
  • 打赏
  • 举报
回复
引用 2 楼 aj3423 的回复:
\s 空白字符,这里用来匹配空格
regex pattern("aa[\\s]+bb");
这样是可以匹配 "aa bb" 的, []里面的表示任意取一, 理论上如果[\\s]+可以匹配,那么[\\s任意东西]+也可以匹配, 不知道为什么加了个 \S 就不行了, 如果说 \S 在这里代表 b, 那为什么aa[\\sb]+bb可以匹配
测了一下, 貌似的确如此. 改其他的吧, 反正一样效果, 以下VS2012都测试过, 可以用. 1. [^] 2. [\\w\\W] 3. [\\d\\D]
taodm 2013-05-11
  • 打赏
  • 举报
回复
用boost库测试你的代码。 如果boost库支持,你就可以向你用的编译器商提bug了。
taodm 2013-05-10
  • 打赏
  • 举报
回复
[]里面\s起作用么?认真查过说明么?

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧