c语⾔正则表达式
%[ ] 的⽤法: %[ ] 表⽰要读⼊⼀个字符集合 , 如果 [ 后⾯第⼀个字符是 ”^” ,则表⽰反意思。
[ ] 内的字符串可以是 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 个字符
%[^=] 读取字符串直到碰到 ’=’ 号, ’^’ 后⾯可以带更多字符 , 如:
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 、⽤法复杂 , 容易出错 .
3 、编译器作语法分析时会很困难 , 从⽽影响⽬标代码的质量和执⾏效率 .
第 3 点最致命,越复杂的功能往往执⾏效率越低下。⽽⼀些简单的字符串分析我们可以⾃已处理。#include<stdio.h>
int main()
{
//例1:从<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\n", uri);
//例2:从iios/12DDWDFF@122中提取 12DDWDFF
const char* s = "iios/12DDWDFF@122";
char buf[20];
sscanf(s, "%*[^/]/%[^@]", buf);
printf("%s\n", buf);
int k;
sscanf( "AAA123BBB456" , "%*[^0-9]%i" , &k) ;
printf("%d\n",k);
return0;
}
456是什么意思网络语言caoming@caoming-PC:~/share$ gcc hehe.cpp caoming@caoming-PC:~/share$ ./a.out
tom
12DDWDFF
123
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论