在scanf中使用正则表达式


[]内是匹配的字符,^表示求反集,当遇到非集合内的字符时立即终止输入

 

1.  输入指定范围的小写字母,遇到非法字符立即终止

 

    scanf("%[a-z]",str1);

    printf("%s\n",str1);

 

    输入:abc123

    输出:ab

 

    //输入带空格的自定范围的字符串

    scanf("%[a-z A-Z0-9]", str1);

    printf("%s\n",str1);

 

    输入:abc123 def 456

    输出:abc 123 def 456

 

    scanf("%[a-z0-9]", str1);

    printf("%s\n",str1);

 

    输入:abc123

    输出:abc

 

2.  输入不包括指定字符的字符

 

    scanf("%[^a-z]", str1);

    printf("%s\n",str1);

 

    输入:123456abc123

    输出:123456

 

    注意:这种方式可以读入空格

 

    scanf("%[^\n]", str1);

    printf("%s\n",str1);

 

    //读入一整行字符串,包括空格

    输入:abc123 def

    输出:abc123 def

 

    scanf("%[^a-d0-9]", str1);

    printf("%s\n",str1);

 

    输入:defxy89

    输出:defxy

 

    我们来看看百分号表示什么意思:

    %表示选择,%后面的是条件,比如"%s",s是一个条件,表示任意字符,"%s"的意思是:只要输入的东西是一个字符,就把它拷贝给str。"%3s"又多了一个条件:只拷贝3

    个字符。 “%[a-z]”的条件稍微严格一些,输入的东西不但是字符,还得是一个小写字母的字符。

    %* 与%刚好相反,表示过滤满足条件的字符,也就是跳过满足条件的字符,其后一定要有新的%语句,否则无法读入

 

3.  跳过指定范围的字符再读取指定范围的字符

    scanf("%*[a-z0-9]%[^\n]",str1);

    printf("%s\n",str1);

 

    输入:a1b2c3ABCdef 123

    输出:ABC def 123

 

4.  %和%*组合使用可以提取指定字符串

    从<sip:tom@172.18.1.133>中提取tom

    const char* url = "<sip:tom@172.18.1.133>";

    char uri[10] = {0};

    sscanf(url,"%*[^:]:%[^@]", uri);

    printf("%s ",uri);

 

    从iios/12DDWDFF@122中提取12DDWDFF

    const char* s = "iios/12DDWDFF@122";

    char buf[20];

    sscanf(s, "%*[^/]/%[^@]", buf);

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值