您的位置:首页 > 编程语言 > C语言/C++

c++ boost库正则表达式的一些经验

2013-03-13 09:21 411 查看
首先,我的匹配设置为:

// 忽略大小写
regex expression( str_pattern ,  boost::regbase::normal|boost::regbase::icase);

如果要匹配的字符串当中含有双引号

比如: acp"abc"dgg ,在c++当中写法如下:

string aa = "acp\"abc\"dgg"; 

要提取当中的abc,那么pattern应该怎么写呢?

找规律发现只要这样写就行:

string pattern = "p\"(.*?)\"d"; 

如果要匹配的字符串当中带有2个空格,acp  "abc"  dgg , 则可以用 +代替(注意前面有一个空格,加号是重复1次或者多次的意思)

string pattern = "p +\"(.*?)\" +d"; 

经过网上查询,boost匹配规则,注意这个规则可能和其他的regex库不一样,因为有不同的format限制:

(参考文献:http://blog.csdn.net/sammy_chan/article/details/8440230)

Escapes 转义符: 

\cX 一个ASCII转义序列 - 字符码点为 X % 32 

\xdd 一个十六进制转义序列 - 匹配码点为0xdd的单个字符。 

\x{dddd} 一个十六进制转义序列 - 匹配码点为0xdddd的单个字符。

\0ddd 八进制转义序列 - 匹配码点为0ddd的单个字符。 

\N{name} 匹配 符号名 为 name 的单个字符。例如 \N{newline} 匹配单个字符 \n。 

也就是说通过在线查询可以得到字符的16进制ASCII码:
http://www.goberl.com/functionAspx/regex.aspx
比如我要匹配的是半角的双引号,那么我输入" 点查询,可以得到如下结果:

输入一个字符	"
十进制ASC码	34
十六进制ASC码	22
八进制ASC码	42
正则表达式匹配	\u0022


按照boost的匹配格式,以成\xdd为例,应该写成:\x22

下面进行必要的测试:

string pattern = "p\\x22(.*?)\\x22d"; 

最终发现匹配成功! ^ ^

常用正则表达式:
http://www.jb51.net/tools/regex.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ boost regex