以下文字从网上考过来
以下在PC上是可以正常运行的,得到的结果应该也是正确的,但是根据在MTK上的调试结果,发现并不完全适用,比如
char *t2="abc123\r\n";
int a2 ;
char b2[100];
sscanf(t2,"%[a-z]%d" , b2,&a2 );
得到 b2的结果是a ,a2的结果是123
但是在 PC上的结果应该是 b2:abc a2:123 具体原因不明
是否是MTK对SSCNAF正则表达式的支持不够,还是我哪里写错了。
实践证明,在不同的平台上,代码的执行效果并不一定一样!!
sscanf函数和正则表达式
]
sscanf函数和正则表达式
此文所有的实验都是基于下面的程序:
char str[100];
char str2[100];
int val;
sscanf( "abaAAA" , "%*[a-z]%s" , str);
printf("%s\n" , str );
// ^ 表示 非 ^A-Z 表示不是大写字母
sscanf( "aaaAAA" , "%*[^A-Z]%s" , str );
printf("%s\n" , str);
//得到的是ccc ,因为在遇到A的时候,已经
//不满足正则表达式了,所以函数会停止
sscanf("cccAAAbbb" , "%[a-z]" , str );
printf("%s\n" , str);
sscanf("abcBBBBBccd" , "%[a-z]%*[B]%[a-z]" , str , str2 );
printf("%s %s\n" , str , str2 );
sscanf("AAAaaBC=" , "%*[A-Z]%*[a-z]%[A-Z]" , str );
printf("%s\n" , str);
//需要提取 www.aisex.com homepage 8080
//%*c 为跳过一个字符
//可以以http:// 等字符串去前端过滤,但是一定要是完全前端匹配
sscanf("http://www.aisex.com/homepage:8080" , "http://%[^/]%*c%[^:]%*c%d" , str , str2 , &val );
printf("%s %s %d\n" , str , str2 , val );
//%*[^w]的意思是 过滤掉不是w的字符
sscanf("http://www.aisex.com/homepage:8080" , "%*[^w]%[^/]%*c%[a-z]%*c%d" , str , str2 , &val );
printf("%s %s %d\n" , str , str2 , val );
//sscanf中如果参数是%s的话,遇到空格就认为是字符串结束了
sscanf("hello, world" , "%s" , str );
printf("%s\n" , str );
//%[a3h]表示匹配a、h、3中的字符,与顺序无关
sscanf("wh3a3333aaatthefuck" , "w%[ah3]" , str );
printf("%s\n" , str );