首先,我的匹配设置为:
// 忽略大小写
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
下面进行必要的测试:
string pattern = "p\\x22(.*?)\\x22d";
最终发现匹配成功! ^ ^
常用正则表达式:
http://www.jb51.net/tools/regex.htm