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 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题