济南哪家公司可以做网站,宝塔无法安装wordpress,定制网站开发价格,简洁文章类织梦网站模板四#xff1a;regex_match例子代码学习1 我们经常会看一个字符串是不是合法的IP地址#xff0c;合法的IP地址需要符合以下这个特征#xff1a;xxx.xxx.xxx.xxx 其中xxx是不超过255的整数正则表达式找到上面的这种形式的字符串相当容易#xff0c;只是判断xxx是否超过255就比…四regex_match例子代码学习1 我们经常会看一个字符串是不是合法的IP地址合法的IP地址需要符合以下这个特征 xxx.xxx.xxx.xxx 其中xxx是不超过255的整数正则表达式找到上面的这种形式的字符串相当容易只是判断xxx是否超过255就比较困难了因为正则表达式是处理的文本而非数字OK我们先来处理一个数字即xxx。找到一种表达式来处理这个数字并且保证这个数字不会超过255第一种情况x即只有一个数字它可以是09 用\d 表示第二种情况xx即有两个数字它可以是0099用\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$(参看反向索引http://www.boost.org/libs/regex/doc/syntax_perl.html似乎反向只能匹配与第一个字符完全一样的字符串与我们的需求不同)Examplestd::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 192.168.4.1;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 class ST, class SA, class Allocator, class charT, class traits bool regex_match(const basic_stringcharT, ST, SA s, match_resultstypename basic_stringcharT, ST, SA::const_iterator, Allocator m, const basic_regex charT, traits e, match_flag_type flags match_default);template class BidirectionalIterator, class Allocator, class charT, class traitsbool regex_match(BidirectionalIterator first, BidirectionalIterator last,match_resultsBidirectionalIterator, Allocator m, const basic_regex charT, traits e,match_flag_type flags match_default); 注意参数m如果这个函数返回false的话m无定义。如果返回true的话m的定义如下 Element Value m.size() e.mark_count() m.empty() false m.prefix().first first m.prefix().last first m.prefix().matched false m.suffix().first last m.suffix().last last m.suffix().matched false m[0].first first m[0].second last m[0].matched true if a full match was found, and false if it was a partial match (found as a result of the match_partial flag being set). m[n].first For all integers n m.size(), the start of the sequence that matched sub-expression n. Alternatively, if sub-expression n did not participate in the match, then last. m[n].second For all integers n m.size(), the end of the sequence that matched sub-expression n. Alternatively, if sub-expression n did not participate in the match, then last. m[n].matched For all integers n m.size(), true if sub-expression n participated in the match, false otherwise. 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 192.168.4.1;boost::smatch what;if( boost::regex_match(testString, what, expression) ){ std::cout This is ip address std::endl; for(int i 1;i 4;i) { std::string msg(what[i].first, what[i].second); std::cout i msg.c_str() std::endl; }}else{ std::cout This is not ip address std::endl;} 这个例子会把所有的IP的单个数字答应出来This is ip address119221683441转载于:https://www.cnblogs.com/shootingstars/archive/2007/08/01/838752.html