scanf()正则表达式的使用

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

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

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

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

输入:abc123

输出:abc

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

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

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

输入:abc123 def 456

输出:abc123

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

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

输入:abc123

输出:abc123

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

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

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

输入:123 456abc123

输出:123 456

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



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

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

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

输入:abc123 def

输出:abc123 def


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

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

输入:efxy89

输出:efxy

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

%表示选择,%后面的是条件,比如"%s",s是一个条件,表示任意字符,"%s"的意思是:只要输入的东西是一个字符,就把它拷贝给str。"%3s"又多了一个条件:只拷贝3个字符。 “%[a-z]”的条件稍微严格一些,输入的东西不但是字符,还得是一个小写字母的字符。

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

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

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

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

输入:a1b2c3ABCdef 123

输出:ABC

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);

原文地址:https://www.cnblogs.com/orange1438/p/4544958.html