达内LOGO和北京达内网址达内科技培训项目:Java培训 3G培训 Android培训 软件测试培训北京达内服务电话
C++培训
初学C++正则表达式

       由效果产生学习的兴趣,即使失败,但至少不会中途作废。

  正则表达式,语法看起来很多啊! 本文做一个简单的学习介绍:(环境:Windows 7 + Visual Studio 2010)

  #include <regex>  //header

  1,匹配电话号码

  string tel_pattern("13([5-8])(\\d{8})");

  //解释:()表示一个子表达式,a,13是开头;b,[5-8]表示这个字符介于'5'和'8'之间;c,\\转义,因为此处d有特殊含义 d{8}表示8个数字。结果:数字个数为11个,以135-138为开头。

  string tel = "13512345678"; www.2cto.com

  bool match = regex_match(tel,tel_pattern);

  2,匹配邮件地址

  string email_pattern("(\\w+)(\\.|_)?(\\w+)@(\\w+)(\\.(\\w+))+");

  //解释:w+表示一个或多个单词,.|_表示。或者_,?表示有0个或者1个,+表示重复。

  @前面的含义是,单词串,串之间可以有1个。或者_,也可以没有

  @后面的含义是,单词串开始,后面有一个 .words或者多个

  3,分隔字符串

  [cpp]

  <span style="font-size:14px;">  regex str_pattern("(\\.)");

  string str = "www.baidu.com";

  sregex_token_iterator iter(str.begin(),str.end(),str_pattern,-1);

  sregex_token_iterator end;

  vector<string> vec;

  while(iter != end)

  {

  vec.push_back(*iter++);

  printf_s("%s \n",vec.back()。c_str());

  }

  printf_s("%d \n",vec.size());</span>

  总结:正则表达式用法很强大,可以完成查找、匹配、分隔操作。

  重要一点:正则表达式 与 编译原理中的语法树、词法分析联系太紧了,相互之间补充理解。