对于正则表达式, 我以前是写javascript脚本的, 对JS的正则很熟悉.目前写boost的正则的时候, 不清楚它和js的正则区别到底在哪里, 所以有时候莫名的错误很多.如:
"^(?:http|https|ftp)://.+/(?:.+\\.pkg)(?:\\?[^/\\]*)?$"一直报错: std::runtime_error = {_Str="Unmatched [ or [^" }我把^ $起始限定符删掉, 一定是这样错误, 不知道boost有没有g模式, i = ignorecase, g = global(和用了^...$一样)请问大家知道哪里有boost正则和其它(如脚本JS)的正则的区别吗?
{
// return value:
// 0 = url, 1 = ps, 2 = txt UINT rtn = 0;
try
{
wregex exp1(_T("^(?:http|https|ftp)://.+/(?:.+\\.pkg)(?:\\?[^/\\]*)?$"),boost::regex::perl|boost::regex::icase);
wregex exp2(_T("^(?:http|https|ftp)://.+/(?:.+\\.txt)(?:\\?[^/\\]*)?$"),boost::regex::perl|boost::regex::icase);
if(regex_match(url,exp1))rtn = 1;
else if(regex_match(url,exp2))rtn = 2;
}
catch(regex_error &ex)
{
printf(ex.what());
}
return rtn;
}
请帮我看一下上面的代码有什么问题吗? 感觉好像是_T("")宽字符引起的??
不好意思, 大家, 是我的代码的问题, 正则是没有问题的.问题在于我没仔细看regex_error的内容.它报的错在:
Unmatched [ or [^
列:46呵呵, 一直以为"^(?:http¦https ¦ftp)://.+/(?:.+\\.pkg)(?:\\?[^/\\]*)?$"
是第一个^有问题, 原来是后面的[^/\\]的问题. \\不就是\吗? 没想到一个\把]也注释了,所以就不匹配了.改成[^\\/] 就是: "^(?:http¦https ¦ftp)://.+/(?:.+\\.pkg)(?:\\?[^\\/]*)?$" 就可以了. OK, 结帖.