boost正则库异常解决

jiangfeng999 2009-05-15 10:02:49
以下的程序本意是用boost的正则库开解析一个网页文本中的urL地址,当正则表达式写的比较简单的时候程序没有问题,表达式一写复杂了boost就会抛出异常了.
代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <boost/regex.hpp>
#include <string>
#include <iostream>
using namespace std;
using namespace boost;
regex expression("http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?");
int main(int argc, char* argv[])
{
char sHtmlBuff[20*1024];
FILE *fp;
fp = fopen("c:\\tomore.htm","rb");
fread(sHtmlBuff,1,sizeof(sHtmlBuff),fp);
fclose(fp);
cmatch what;
cout << "enter test string" << endl;
//getline(cin,in);
if(regex_match(sHtmlBuff, what, expression))
{
for(int i=0;i<what.size();i++)
cout<<"str :"<<what[i].str()<<endl;
}
else
{
cout<<"Error Input"<<endl;
}
return 0;
}

异常信息:FindUrl.exe 中的 0x7c812a7b 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0013f858 处的 boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::regex_error> >
...全文
542 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzh9955 2009-05-18
  • 打赏
  • 举报
回复
围观牛人~:)
jiangfeng999 2009-05-18
  • 打赏
  • 举报
回复
谢谢大家的热心帮助
jiangfeng999 2009-05-18
  • 打赏
  • 举报
回复
问题解决了,原因在于 http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?中-]+(/[\w- ./的.没有做转义,导致会产生-.
这样的歧义事件
taodm 2009-05-16
  • 打赏
  • 举报
回复
兄弟,正则的转义规则你没认真看全。再耐心些吧。
这东西没有捷径,错过太多次了就掌握了。大家都这么过来的。
jiangfeng999 2009-05-16
  • 打赏
  • 举报
回复
http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?
我的正则表达式已经改成这个了,可是问题依旧
iambic 2009-05-16
  • 打赏
  • 举报
回复
把-放在[]的最前面或者最后面试试。
jiangfeng999 2009-05-16
  • 打赏
  • 举报
回复
我刚才用try..catch..捕获了异常,发现boost报的异常错误类型是
error_range = 11, A character range was invalid, for example [d-a].
字符范围无效,例如 [d-a]。
tangshuiling 2009-05-15
  • 打赏
  • 举报
回复
mark!
SenerityChzr 2009-05-15
  • 打赏
  • 举报
回复
最简单的方式,在文档中(eg. UE)写个完整的网址,看能否是用你的这个表达式搜索到
  • 打赏
  • 举报
回复
taodm 2009-05-15
  • 打赏
  • 举报
回复
找个regextest这样的工具验证你写的正则的正确性
jixingzhong 2009-05-15
  • 打赏
  • 举报
回复
根据文档,catch 可能的一场,抛出、捕获,分析一下
jixingzhong 2009-05-15
  • 打赏
  • 举报
回复
根据文档,catch 可能的一场,抛出、捕获,分析一下
liliangbao 2009-05-15
  • 打赏
  • 举报
回复
帮顶,学习~
「已注销」 2009-05-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 taodm 的回复:]
哎,又一个学了boost忘了C的兄弟。
\\w
[/Quote]
同感!
taodm 2009-05-15
  • 打赏
  • 举报
回复
哎,又一个学了boost忘了C的兄弟。
\\w
jiangfeng999 2009-05-15
  • 打赏
  • 举报
回复
目前问题的核心不是说正则是否可以匹配到,而是正则函数抛出异常了.
而且这个正则我用正则表达测试工具可以测试通过,可就是用boost库时抛出了异常.

65,210

社区成员

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

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