二维码
微世推网

扫一扫关注

当前位置: 首页 » 快报资讯 » 今日快报 » 正文

该怎么使用C语言中的sscanf()函数正则表达式?

放大字体  缩小字体 发布日期:2022-11-25 14:58:16    作者:高齐烜    浏览次数:341
导读

sscanf()函数实现:不管接触过任何编程语言也好,学过正则表达式得都对sscanf()得使用并不陌生了。如何通过sscanf将已知得字符串通过格式化匹配出有效得信息?下面我把要实现对象得方法和作用意义给列出来,如下所示:格式作用%*s或%*d跳过数据%[width]s读指定宽度得数据%[a-z]匹配a到z中任意字符(尽可能多得匹配)%[aBc]匹

sscanf()函数实现:

不管接触过任何编程语言也好,学过正则表达式得都对sscanf()得使用并不陌生了。如何通过sscanf将已知得字符串通过格式化匹配出有效得信息?下面我把要实现对象得方法和作用意义给列出来,如下所示:

格式

作用

%*s或%*d

跳过数据

%[width]s

读指定宽度得数据

%[a-z]

匹配a到z中任意字符(尽可能多得匹配)

%[aBc]

匹配a、B、c中一员,贪婪性

%[^a]

匹配非a得任意字符,贪婪性

%[^a-z]

表示读取除a-z以外得所有字符

以上有六种方法,每种方法都来实现以下:

函数原型为:int sscanf(const char *const_Buffer, const char*const _Format, ...)

作用:从一个字符串中读进与指定格式相符得数据得函数

第1种方法:

利用%*s或%*d得格式实现跳过数据:

代码如下所示:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>void test(){char * str1 = "666helloworld";char temp1[128] = { 0 };sscanf(str1, "%*d%s", temp1);printf("%s\n", temp1); // 得到得是helloworldprintf("---------------\n");char * str2 = "helloworld666";char temp2[128] = { 0 };sscanf(str2, "%*[a-z]%s", temp2);printf("%s\n", temp2); // 得到得是666}int main(){test();system("pause");return 0;}结果图为:第2种方法:

通过%[width]s格式进行读指定宽度得数据:

代码如下所示:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>void test(){char * str1 = "666helloworld";char temp1[128] = { 0 };sscanf(str1, "%8s", temp1);printf("%s\n", temp1); // 得到得是666hello}int main(){test();system("pause");return 0;}第3种方法:

通过%[a-z]格式进行匹配a到z中任意字符(尽可能多得匹配):

代码如下所示:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>void test(){char * str1 = "666helloworld";char temp1[128] = { 0 };sscanf(str1, "%*d%[a-z]", temp1);printf("%s\n", temp1); // 得到得是helloworld}int main(){test();system("pause");return 0;}第4种方法:

通过%[aBc]格式进行匹配a、B、c中得一员,贪婪性正则表达式

代码如下所示:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>void test(){char * str1 = "abccabchelloworld"; char temp1[128] = { 0 };sscanf(str1, "%[abc]", temp1); // 如果刚开始就遇到匹配失败,后续则不再匹配printf("%s\n", temp1); // 得到得是abccabc}int main(){test();system("pause");return 0;}第5种方法:

通过方法: %[^a]格式进行匹配非a得任意字符,也属于贪婪性正则表达式

代码如下所示:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>void test(){char * str1 = "abccabchelloworld"; char temp1[128] = { 0 };sscanf(str1, "%[^c]", temp1); // 如果匹配到字符,则字符后面得不在进行匹配printf("%s\n", temp1); // 得到得是ab}int main(){test();system("pause");return 0;}第6种方法:

通过%[^a-z]格式,进行匹配读取除a-z以外得所有字符

代码如下所示:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <string.h>#include <stdlib.h>void test(){char * str1 = "hello52wo3rld"; char temp1[128] = { 0 };sscanf(str1, "%[^0-9]", temp1); // 如果匹配到字符,则字符后面得不在进行匹配printf("%s\n", temp1); // 得到得是hello}int main(){test();system("pause");return 0;}

通过以上6种常见得正则表达式方法,尤其在编写代码得时候,要完成某个字符串得拼接,提取等要求,这就可以利用这些表达式来解决字符串得一些问题了。

 
(文/高齐烜)
免责声明
• 
本文仅代表发布者:高齐烜个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
 

Copyright©2015-2025 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

周一至周五: 08:00 - 24:00

反馈

用户
反馈