`
tudusi
  • 浏览: 1050421 次
文章分类
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    c语言 sscanf,scanf,fscanf正则表达式用法

    每种语言都对正则表达式有着不同程度的支持,在C语言中,有输入功能的这三个函数对正则表达式的支持并不强大,但是我们还是有必要了解一下。 首先来看看他们的原型: #include int scanf(const char *format, ...)...

    转到库以将正则表达式捕获组扫描到类似于fmt.Scanf的变量-Golang开发

    该库仍处于试验阶段,可在您的rxscan上使用rxscan提供使用正则表达式捕获组将文本扫描到变量的功能。 该库仍处于试验阶段,使用风险自负。 始终欢迎您提供文稿,如果发现任何问题,请提交问题。 示例扫描字符串输入...

    修改版--支持全正则表达式的ssanf_s---cscanf

    http://blog.csdn.net/sismvg/article/details/9123689 看这篇文章

    sscanf 详解

    sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。但是有点类似于正则表达式

    你必须知道的495个C语言问题

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...

    C语言FAQ 常见问题列表

    o 7.1 我在一个源文件中定义了 char a[6], 在另一个中声明了 extern char *a 。为什么不行 ? o 7.2 可是我听说 char a[ ] 和 char *a 是一样的。 o 7.3 那么, 在 C 语言中 ``指针和数组等价" 到底是什么意思 ? ...

    《你必须知道的495个C语言问题》

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...

    sscanf函数的高级用法

    sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。

    你必须知道的495个C语言问题(PDF)

    2.10 我的编译器在结构中留下了空洞, 这导致空间浪费而且无法与外 部数据文件进行”二进制” 读写。能否关掉填充, 或者控制结构域 的对齐方式? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.11...

Global site tag (gtag.js) - Google Analytics