lll714775117 2019-07-31 11:40 采纳率: 0%
浏览 325

请问下Linux下C++的正则表达式匹配全部字符的时候为什么会报错?

    regex re("<form[\\S\\s]+method=\"get\"[\\S\\s]+/form>");
    for (sregex_iterator it(html.cbegin(), html.cend(), re), end; it != end; it++, n++)
        continue;

程序是在Ubantu下编译的,html是string对象,存储的是网页源代码,网页源代码是用wget命令下载的,然后读取到html对象中,这段代码目的是为了匹配网页源代码中的get方法,用以上的正则表达式匹配www.hao123.com网页源代码时候会出现Segmentation fault错误,调试之后定位出来问题出在"[\S\s]+"这个正则表达式语句上,这个语句是为了匹配所有的字符,求解各位为什么会出现越界的问题?如果要匹配所有字符的话,C++中的正则表达式应该怎么使用呢?

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-06-26 17:37
    关注

    对于这个问题,出现Segmentation fault错误的原因是正则表达式中的“[\S\s]+”语句中使用了贪婪匹配,导致最后的匹配结果超出了字符串的范围,从而引发了越界问题。为了解决这个问题,可以将正则表达式的“+”改为“+?”,从而使用非贪婪匹配,确保匹配结果在字符串范围之内。具体改为如下:

    regex re("<form[\\S\\s]+?method=\"get\"[\\S\\s]+?/form>");
    

    这样修改后,就不会出现越界问题了,可以正确地匹配所有字符。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog