sscanf高级用法
理解了%[^|]|
这个模式就基本能解析复杂字符串了。
这个模式是%s
的一个正则表达式方向的进化,本意也是要取字符串,但是是有选择的取。如何选择,就写在[]
中。其中的^
表示“不取”,不取哪些模式就写在^
的后面。
例子中的[^|]
就表示不取|
,取到|
就停止了,最后一个|
则对应源串中的|
。
整体来看,%[^|]|
就表示取到|
为止(不取这个|
)然后跳过|
。
另外还有更多的取%s的进化,比如%[0-9]
(只取数字)、%[0-9a-z]
(取数字或者小写英文字符)、%[0-9.]
(取数字或者英文句号)。
注意:这种正则表达式的进化只存在于%s的选取,对于%d之类的其他类型不需要。因为这些其他类型只要遇到不符合的字符就会立即停止,%s则可以包含各种字符,所以才需要正则表达式来指导它取哪些不取哪些。
如下面例子中的ip字段的选取,直接用%d即可。(当然后面还要写上
|
来跳过源串中的|
)
例子:
#include <stdlib.h>
#include <stdio.h>#include <debug_macro/my_debug.h>int main()
{char type[32] = {0};char ip[17] = {0};int port = 0;char jsonStr[128] = {0};char *string = "cAgent|10.10.10.1|1234|{Json}";sscanf(string, "%[^|]", type);DEBUG_PRINTF("type: %s\n", type);sscanf(string, "%[^|]|%[^|]", type, ip);DEBUG_PRINTF("type: %s, ip: %s\n", type, ip);sscanf(string, "%[^|]|%[^|]|%d", type, ip, &port);//注意这个port的选取,直接写%d即可DEBUG_PRINTF("type: %s, ip: %s, port: %d\n", type, ip, port);sscanf(string, "%[^|]|%[^|]|%d|%s", type, ip, &port, jsonStr);DEBUG_PRINTF("type: %s, ip: %s, port: %d, jsonStr: %s\n", type, ip, port, jsonStr);return 0;}
运行结果:
[root@localhost195-46 other]# gcc test.c -o test -I ./ -DMY_DEBUG_ON
[root@localhost195-46 other]# ./test
[main:16]type: cAgent
[main:18]type: cAgent, ip: 10.10.10.1
[main:20]type: cAgent, ip: 10.10.10.1, port: 1234
[main:22]type: cAgent, ip: 10.10.10.1, port: 1234, jsonStr: {Json}
sscanf高级用法相关推荐
- ATS中用到的sscanf高级用法说明
ATS使用sscanf函数主要用来解析配置文件,或者提取出要用到的数据类型的值,比较方便,大家可以使用SourceInsight来搜索sscanf用到的地方,这里补充一些sscanf的知识,方便自己更 ...
- sscanf高级用法级正则表达式
sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源. 函数原型: int scanf( const char *format [,argume ...
- scanf,sscanf高级用法
最近遇到了解析配置的问题,用正规表达式感觉大题小做,使用sscanf因只会用基本用法,感觉功能不够,上网搜了下,解析起来不费吹灰之力,代码也很简洁. 原帖出处不详,网上到处是,我做了点修改 名称: s ...
- sscanf的高级用法
sscanf的高级用法(总结) 2012-04-25 18:50:25 分类: C/C++ sscanf(recvbuf,"%*[^/]/%[^ ]s",buf_rev); ...
- sscanf和sprintf的高级用法
sscanf和sprintf是scanf和printf家族的一对成员,用于处理和分析字符串非常强大得两个函数 头文件 stdio.h 原型 int sscanf( const char *buffer ...
- scanf family API 高级用法
sscanf是一个很好用的函数,利用它可以从字符串中取出整数.浮点数和字符串等等.它的使用方法简单,特别对于整数和浮点数来说.但新手可能并不知道处理字符串时的一些高级用法,这里做个简要说明吧. 1. ...
- sscanf一小用法
背景:欲从FTP服务器下载一文件,须知其大小,使用SIZE命令无效(该命令在RFC959中未出现,即非标准命令).经测试发现RETR命令返回的信息中包含了文件大小,即字节数,现需要将其从字符串中解析出 ...
- vim的高级用法配置以及在系统中如何获取帮助
vim的高级用法配置以及在系统中如何获取帮助 1 vim的三种模式 1.1 使用方法 1.2 vim模式 2 vim工作的基本配置 2.1 临时设定(set设定) 2.2 永久设定方式 3 搜索 4 ...
- Cacti Weathermap 高级用法 (二)
成都长宽Weathermap实际运用的效果图示例: 这是一个CNC出口的质量监控图. 途中cnc节点(红色)是一个展示图例,TEL节点根据存活状态显示为绿色 TEL节点上面P:47.2ms 是一个,这 ...
最新文章
- Spark菜鸟学习营Day5 分布式程序开发
- 【组队学习】【30期】时间序列分析
- datetime 和 smalldatetime
- Hive数据分析——Spark是一种基于rdd(弹性数据集)的内存分布式并行处理框架,比于Hadoop将大量的中间结果写入HDFS,Spark避免了中间结果的持久化...
- python统计单词出现次数_用python统计单词出现频率
- 图论为什么这么难_图论是什么,为什么要关心?
- Kubernetes集群上的Apache Ignite和Spring第1部分:Spring Boot应用程序
- 成都女孩弃港大全额奖学金,将去北大读马克思,“我对党史和马克思很有感情”!...
- 双绞线传输距离_视频监控系统中布线常用传输线缆分类及制作方法
- 我构建应用的这十年......
- 一步一步手绘Spring IOC运行时序图三(基于Annotation的IOC容器初始化)
- mz04那智不二越机器人编程_买买买!这些炫酷的机器人已加入进博会“购物车”!...
- oracle启动数据库错误
- 微积分(二)——曲线积分与曲面积分笔记
- 学科03:工程学重要模型
- 计算当前时间到午夜零点的时间差——Java(JDK1.8)
- Linux系统命令行常识问答2
- 背单词App开发日记4
- 在线微信公众号调查数据分析报告
- Python3.8.5安装教程