正則表達式 - C语言
http://blog.csdn.net/pipisorry/article/details/37073843
sscanf/scanf正则使用方法
%[ ] 的使用方法:%[ ]表示要读入一个字符集合, 假设[ 后面第一个字符是”^”,则表示反意思。
[ ]内的字符串能够是1或很多其它字符组成。
空字符集(%[])是违反规则的。可
导致不可预知的结果。%[^]也是违反规则的。
%[a-z] 读取在 a-z 之间的字符串,假设不在此之前则停止。如
char s[]="hello, my friend” ; // 注意: ,逗号在不 a-z之间
sscanf( s, “%[a-z]”, string ) ; // string=hello
%[^a-z] 读取不在 a-z 之间的字符串。假设碰到a-z之间的字符则停止,如
char s[]="HELLOkitty” ; // 注意: ,逗号在不 a-z之间
sscanf( s, “%[^a-z]”, string ) ; // string=HELLO
%*[^=] 前面带 * 号表示不保存变量。跳过符合条件的字符串。
char s[]="notepad=1.0.0.1001" ;
char szfilename [32] = "" ;
int i = sscanf( s, "%*[^=]", szfilename ) ; // szfilename=NULL,由于没保存
int i = sscanf( s, "%*[^=]=%s", szfilename ) ; // szfilename=1.0.0.1001
%40c 读取40个字符
The run-time library does not automatically append a null terminator to the string, nor does reading 40 characters automatically terminate the scanf() function. Because the library uses buffered input, you must press the ENTER key to terminate
the string scan. If you press the ENTER before the scanf() reads 40 characters, it is displayed normally。 and the library continues to prompt for additional input until it reads 40 characters
%[^=] 读取字符串直到碰到’=’号。’^’后面能够带很多其它字符,如:
char s[]="notepad=1.0.0.1001" ;
char szfilename [32] = "" ;
int i = sscanf( s, "%[^=]", szfilename ) ; // szfilename=notepad
假设參数格式是:%[^=:] ,那么也能够从 notepad:1.0.0.1001读取notepad
使用样例:
char s[]="notepad=1.0.0.1001" ;
char szname [32] = "" ;
char szver [32] = “” ;
sscanf( s, "%[^=]=%s", szname , szver ) ; // szname=notepad, szver=1.0.0.1001
总结:%[]有非常大的功能,可是并非非经常常使用到,主要由于:
1、很多系统的 scanf 函数都有漏洞. (典型的就是 TC 在输入浮点型时有时会出错).
2、使用方法复杂, easy出错.
3、编译器作语法分析时会非常困难, 从而影响目标代码的质量和运行效率.
个人认为第3点最致命,越复杂的功能往往运行效率越低下。而一些简单的字符串分析我们能够自已处理。
[sscanf/scanf正则使用方法]
补充:sscanf,scanf。fscanf中的正則表達式
每种语言都对正則表達式有着不同程度的支持。在C语言中,有输入功能的这三个函数对正則表達式的支持并不强大。可是我们还是有必要了解一下。
首先来看看他们的原型:
#include <stdio.h>
int scanf(const char *format, ...);
int fscanf(FILE *stream, const char *format, ...);
int sscanf(const char *str, const char *format, ...);
均能够接受变參。sscanf与scanf类似。能够将标准输入(stdin)作为输入源。最关键的部分,就是format这个參数了。它能够是一个或者多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}。
參数解释:
1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入參数中)
2、{a|b|c}表示a,b,c中选一。[d],表示能够有d也能够没有d。
3、width表示读取宽度。
4、{h | l | I64 | L}:參数的size,通常h表示单字节size。I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
5、type : 就是%s,%d之类。
6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标參数中写入值
支持的集合操作:%[a-z] 表示匹配a到z中随意字符。贪婪性(尽可能多的匹配)%[aB'] 匹配a、B、'中一员,贪婪性%[^a] 匹配非a的随意字符,贪婪性
返回值
这三个函数返回成功匹配和分配的输入项。意思就是你在format參数列表中的格式。返回值能够比你提供的匹配项目数少(有些将会匹配失败)。提前匹配失败则返回0。
假设达到文件末尾。则返回EOF,当错误发生的时候也将返回EOF。你能够通过输出errno来查看错误代码。
假设使用fscanf来推断文件是否结束,将会存在安全隐患,假设每次读取的时候都是匹配失败,那么返回值永远都不会是EOF。
scanf族的函数都是要先将数据读入缓冲区。然后在冲缓冲里读取。
注意:scanf族函数会忽略一行開始的空白
from:http://blog.csdn.net/pipisorry/article/details/37073843
正則表達式 - C语言的更多相关文章
- python 学习笔记 10 -- 正則表達式
零.引言 在<Dive into Python>(深入python)中,第七章介绍正則表達式,开篇非常好的引出了正則表達式,以下借用一下:我们都知道python中字符串也有比較简单的方法, ...
- 【iOS】正則表達式抓取网页数据制作小词典
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xn4545945/article/details/37684127 应用程序不一定要自己去提供数据. ...
- Go语言:正則表達式的使用
Go语言的正則表達式使用非常easy.演示样例代码: package test import ( "fmt" "regexp" ) func RegixBase ...
- Linux正則表達式-反复出现的字符
星号(*)元字符表示它前面的正則表達式能够出现零次或多次.也就是说,假设它改动了单个字符.那么该字符能够在那里也能够不在那里,而且假设它在那里,那可能会不止出现一个.能够使用星号元字符匹配出如今引號中 ...
- JAVA中正則表達式总结
昨天,我的朋友请教我正則表達式.我也好久没有写过正則表達式了,昨天刚好看了下如鹏网创始人杨中科老师关于正則表達式的解说.使我加深了正則表達式的印像.现我把他总结下: 很多语言,包含Perl.PHP.P ...
- Perl入门(四)Perl的正則表達式
正則表達式是Perl语言的特色.主要的语法不是非常难,可是编写一个符合需求.高效的正則表達式.还是有一些挑战的. Perl的三种匹配模式 1.查找 语法:m/正則表達式内容/; 作用:查找匹配内容中是 ...
- 轻松学习之Linux教程六 正則表達式具体解释
本系列文章由@超人爱因斯坦出品.转载请注明出处. 作者:超人爱因斯坦 个人站点:http://www.hpw123.net 文章链接:http://hpw123.net/a/L ...
- javascript 正則表達式补充
定义 JavaScript种正則表達式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...
- 黑马程序猿————Java基础日常笔记---反射与正則表達式
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序猿----Java基础日常笔记---反射与正則表達式 1.1反射 反射的理解和作用: 首 ...
随机推荐
- 手机端-ajax跨域请求滚屏分页
近期做了一个关于信息展示的详情页面,将里面能够提升用户体验的小点写出来 1.当页面请求新的数据,或上传数据的时候 放一个loading.gif的过渡,告诉用户 你的操作已经完成,正在加载中 2.当所有 ...
- BZOJ1975 [Sdoi2010]魔法猪学院 k短路
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1975 题意概括 给出一个无向图,让你走不同的路径,从1到n,路径长度之和不超过E,求最大路径条数. ...
- P1156 垃圾陷阱 DP
题目描述 卡门――农夫约翰极其珍视的一条Holsteins奶牛――已经落了到“垃圾井”中.“垃圾井”是农夫们扔垃圾的地方,它的深度为D(2 \le D \le 100)D(2≤D≤100)英尺. 卡门 ...
- 【目录】《剑指Offer》Java实现
如题: 1) 找出数组中重复的数字 2) 不修改数组找出重复的数字 3) 二维数组中的查找 4) 替换空格 5) 从尾到头打印链表 6) 重建二叉树 7) 二叉树的下一个结点 8) 用两个栈实现队列 ...
- 056 Java搭建kafka环境
1.使用Java项目搭建 2.新目录 3.添加项目支持 4.添加mavem与scala 5.修改pom <?xml version="1.0" encoding=" ...
- 041 SparkSql的回顾与复习
在前面学完了SparkCore后,又学了SparkSQL,在继续加深学习之前,一定的复习还是很重要的.这里大体写一下,加深自己对SparlSQL的理解. 1.SparkSQL 首先是SaprkSQL与 ...
- python 列表list操作
1. 切片:(左闭右开) 用-1倒置 2. 拆包 3. list的append 与 insert 4. 两个列表合并,直接 + : 5. 加入列表 extend: 6. pop()删除(通过序号,或最 ...
- 基于netty的websocket例子
nettyServer package com.atguigu.netty.websocket; import javax.annotation.PostConstruct; import org.s ...
- Xamarin Essentials教程构建共享请求
Xamarin Essentials教程构建共享请求 共享请求类ShareTextRequest可以用于构建复杂形式的数据,用于向其他应用传输.例如,它可以指定共享内容的主题Subject,用于给邮件 ...
- MacOs brew 命令行安装常见工具
brew类似ubuntu系统下的apt-get的功能 安装方法: 在Mac中打开Termal: 输入命令: ruby -e "$(curl -fsSL https://raw.githu ...