SSCANF 正则表达式

以下文字从网上考过来

以下在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 );

    孕妇能用护肤品吗

原文地址:https://www.cnblogs.com/rollrock/p/2337264.html