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

1 篇文章 0 订阅
1 篇文章 0 订阅

首先,我的匹配设置为:

// 忽略大小写
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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值