关于boost正则的问题

rotApple 2008-04-06 03:16:17

对于正则表达式, 我以前是写javascript脚本的, 对JS的正则很熟悉.

目前写boost的正则的时候, 不清楚它和js的正则区别到底在哪里, 所以有时候莫名的错误很多.

如:
"^(?:http|https|ftp)://.+/(?:.+\\.pkg)(?:\\?[^/\\]*)?$"

一直报错: std::runtime_error = {_Str="Unmatched [ or [^" }

我把^ $起始限定符删掉, 一定是这样错误, 不知道boost有没有g模式, i = ignorecase, g = global(和用了^...$一样)

请问大家知道哪里有boost正则和其它(如脚本JS)的正则的区别吗?
...全文
78 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rotApple 2008-04-07
  • 打赏
  • 举报
回复

不好意思, 大家, 是我的代码的问题, 正则是没有问题的.

问题在于我没仔细看regex_error的内容.

它报的错在:
Unmatched [ or [^
列:46

呵呵, 一直以为"^(?:http¦https ¦ftp)://.+/(?:.+\\.pkg)(?:\\?[^/\\]*)?$"
是第一个^有问题, 原来是后面的[^/\\]的问题. \\不就是\吗? 没想到一个\把]也注释了,所以就不匹配了.

改成[^\\/] 就是: "^(?:http¦https ¦ftp)://.+/(?:.+\\.pkg)(?:\\?[^\\/]*)?$" 就可以了. OK, 结帖.
rotApple 2008-04-07
  • 打赏
  • 举报
回复
我看了上面的网址, 说的内容除了[[:lower:]]内在的名称之外, 基本相同, 至少我写的这些是相同的, 所以不知道问题是不是出在我的代码上, 我的代码如下:

UINT const GetImageIndex(wchar_t *url)
{
// 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("")宽字符引起的??
  • 打赏
  • 举报
回复
这个你看一下这个正则的官方文档吧.好像说过一些.
masterz 2008-04-06
  • 打赏
  • 举报
回复
js和boost.regex的语法不太一样,仔细看看http://www.boost.org/doc/libs/1_35_0/libs/regex/doc/html/boost_regex/syntax.html

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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