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++中的正则表达式应该怎么使用呢?
对于这个问题,出现Segmentation fault错误的原因是正则表达式中的“[\S\s]+”语句中使用了贪婪匹配,导致最后的匹配结果超出了字符串的范围,从而引发了越界问题。为了解决这个问题,可以将正则表达式的“+”改为“+?”,从而使用非贪婪匹配,确保匹配结果在字符串范围之内。具体改为如下:
regex re("<form[\\S\\s]+?method=\"get\"[\\S\\s]+?/form>");
这样修改后,就不会出现越界问题了,可以正确地匹配所有字符。