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

首先,我的匹配设置为:

// 忽略大小写
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++,regex,boost)