四:regex_match例子代码学****1我们经常会看一个字符串是不是合法的IP地址,合法的IP地址需要符合以下这个特征: ,只是判断xxx是否超过255就比较困难了(因为正则表达式是处理的文本,而非数字)OK,我们先来处理一个数字,即:xxx。找到一种表达式来处理这个数字,并且保证这个数字不会超过255第一种情况:x,即只有一个数字,它可以是0~9,用\d表示第二种情况:xx,即有两个数字,它可以是00~99,用\d\d表示第三种情况:xxx,这种情况分为两种,一种是1xx,可以用1\d\d表示 另外一种是2xx,这又分为两种2[01234]\d 和25[012345]好了组合起来1?\d{1,2}|2[01234]\d|25[012345]既可以标识一个不大于255的数字字符串嗯,我们现在需要重复这种情况既可:(1?\d{1,2}|2[01234]\d|25[012345])\.(1?\d{1,2}|2[01234]\d|25[012345])\.(1?\d{1,2}|2[01234]\d|25[012345])\.(1?\d{1,2}|2[01234]\d|25[012345])呵呵,长是长了点,我试图用boost支持的子表达式缩短,但是没有达到效果,请各位了解boost的正则表达式的达人指点:(1?\d{1,2}|2[01234]\d|25[012345])\.\1$\.\1$\.\1$(参看反向索引:s/regex/doc/,与我们的需求不同)Example:std::string regstr = "(1?\\d{1,2}|2[01234]\\d|25[012345])\\.(1?\\d{1,2}|2[01234]\\d|25[012345])\\.(1?\\d{1,2}|2[01234]\\d|25[012345])\\.(1?\\d{1,2}|2[01234]\\d|25[012345])";boost::regex expression(regstr);std::string testString = "";if( boost::regex_match(testString, expression) ){ std::cout<< "This is ip address" << std::endl;}else{ std::cout<< "This is not ip address" << std::endl;}2我们来看看regex_match的另外一个函数原型template<classST,classSA,classAllocator,classcharT,classtraits> boolregex_match(constbasic_string<charT,ST,SA>&s, match_results<typenamebasi
regex学习以及例子 来自淘豆网www.taodocs.com转载请标明出处.