_stscanf_s (sscanf)正则表达式

_stscanf_s (sscanf)正则表达式  

 
 
{%[*] [width] [{h | l | I64 | L}]type  |  ' ' |  '\t' | '\n' | 非%符号},
注:{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
width:宽度,一般可以忽略,用法如:
const  char sourceStr[] = "hello, world";
char buf[10] = {0};
sscanf(sourceStr, "%5s", buf);   //%5s,只取5个字符
cout << buf<< endl;
结果为:hello
{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
type :这就很多了,就是%s,%d之类。
 
特别的:
%*[width] [{h | l | I64 | L}]type  表示满足该条件的被过滤掉,不会向目标参数中写入值。如:
const  char sourceStr[] = "hello, world";
char buf[10] = {0};
sscanf(sourceStr, "%*s%s", buf);   //%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了
cout << buf<< endl;
结果为:world
支持集合操作:
         %[a-z]  表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
         %[aB']  匹配a、B、'中一员,贪婪性
         %[^a]    匹配非a的任意字符,贪婪性
 
%*c表示忽略连续多个字符
 
%[^ ] 取遇到空格为止字符串
 
%[^A-Z] 取遇到大写字母为止的字符串
 
%[1-9a-z] 取仅包含1到9和小写字母的字符串
 
看看周星星同学的例子
const char* s = "iios/12DDWDFF@122";
sscanf( s, "%*[^/]/%[^@]", buf );
结果为:12DDWDFF
posted @ 2014-03-21 13:22  jianguo_wang  阅读(2232)  评论(0编辑  收藏  举报