如何使用正则表达式regex_replace模拟读取INI文件

  介绍

这篇文章主要介绍如何使用正则表达式regex_replace模拟读取INI文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

具体代码如下所示:

# include “stdio.h",   # include  & lt; sstream>,   # include  & lt; iostream>,   # include  & lt; fstream>,   # include  & lt; regex>,   using  namespace 性病,   void 削减(char  *, str),,   void  lTrim (char  *, str),,   void 空白(char  *, str),,//,测试sscanf 和,正则表达式,//,sscanf提供的这个扩展功能其实并不能真正称为正则表达式,因为他的书写还是离不开%,//,[]表示字符范围,{}表示重复次数,^表示取非,*表示跳过。所以上面这个url的解析可以写成下面这个样子:,//,//char  url [],=,“dv://192.168.1.253:65001/1/1",//,//sscanf (url,,“% (^://) % * % * c % * % [^:] % * c % d % * % d % * c % d",,协议,ip,,,,中文,,类型),,//,//解释一下,//先取得一个最长的字符串,但不包括字串,://于是协议=癲v \ 0“,,//然后跳过三个字符,(% * c)其实就是跳过,://,//,接着取一个字符串不包括字符串,:,,于是ip =, 192.168.1.253,这里简化处理了,IP就当个字符串来弄,而且不做检查,//,然后跳过冒号取端口到港口,再跳过,/,取通道号到中文,再跳过,/,取码流类型到类型又是;//,c语言实现上例,   void  test1 (),   {,   ,char  url [],=,“dv://192.168.1.253:65001/1/1",,   ,char 协议[10],   ,char  ip [17],   ,int 港口;   ,int 中文;   ,int 类型;   ,sscanf (url,,“% (^://) % * % * c % * % [^:] % * c % d % * % d % * c % d",,协议,ip,,,,,,中文,,,类型),,   ,printf (“% s,, % s,, % d,, % d,, % d \ n",,协议,ip,,,,中文,,类型),,   },//,读取ini里某行字符串,,得到:,hello 世界!,//,正常串1:,声称=癶ello 世界!“,//,正常串2:,claim =,“hello 世界!“,//,正常串3:,claim =,,, hello 世界!“,//,正常串4:,claim_ =, hello 世界!,//,干扰串1:,cl-aim =, \“hello 世界!“,//,干扰串2:,clai3m =,“hello 世界! \“,//,干扰串3:,cla_im =, \ \“hello 世界! \“,//,干扰串4:,claim =& # 39;“hello 世界! \“,//,干扰串5:,声称=,@" \ nhello 世界!“,//,干扰串6:,声称=L" hello 世界!“,//,未处理1:,声称[1],=,1,//,未处理1:,声称[2],=,1,   void  test2 (),   {,   行,char  [1000],=, {, 0},,   ,char  val [1000],=, {, 0},,   ,char 关键[1000],=,{,0},,   ,FILE  * fp =, fopen (“1. txt",,“r"),,   ,if  (NULL ==, fp),   {大敌;   ,,printf (“failed 用open  1. txt \ n"),,   ,,return ;   }大敌;   (!,while  feof (fp)),   {大敌;   ,,memset(线,,0,,sizeof(线)),,   fgets才能(线,sizeof(线),安康;1,fp);,//,包含了每行的\ n    ,,printf (“% s",,行),,   削减(线);才能,//,才能提取等号之前的内容,   ,,memset(键,0,sizeof(关键),,//才能,sscanf使用的格式不是正则表达式,不能用,\ \ s 表示各种空白符,即空格或\ t \ n \ r \ f    ,,sscanf(线,,“% [^,\ t \ n \ r \ f=]“,,键),,//才能sscanf(线,,“% * [^ a-zA-Z0-9_ -] % [^, \ t \ n \ r \ f=]“,,键),,   ,,printf(关键:“还以为;[% s] \ n",,键),,//,才能提取等号之后的内容,   ,,memset (val, 0, sizeof (val)),,   ,,sscanf(线,,“% c * [^=) % * % ^ \ [n]“,, val);,//,不包含了每行的换行符,   削减(val);才能,   ,,printf (“, val: [% s] \ n",, val),,//,才能去除两边双引号,//,,,,,//,才能插入map //才能,地图(例子)=价值;,//才能,string 转,其它类型,//才能,atoi,, atol,, atof    }大敌;   ,printf (“\ n");,   ,fclose (fp);   },//,上例的c++实现,   template,   inline  T1  parseTo (const  T2  t),   {,   ,static  stringstream  sstream;   ,T1  r;   ,sstream  & lt; & lt; t,,   ,,sstream 的在祝辞,r,,   ,sstream.clear (),,   ,return  r;   },   void  test3 (),   {,   ,char  val [1000],=, {, 0},,   ,char 关键[1000],=,{,0},,   ,ifstream 鳍(“1. txt");,   ,string 行;   ,if (翅片),   {大敌;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何使用正则表达式regex_replace模拟读取INI文件