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

请问下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 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码