C++中正则表达式 的 子表达式(subexpressions) 的数据验证2014-11-20子表达式(subexpressions)的 数据验证(data validation), 可以通过括号"()"分解正则表达式的子表达式;然后使用下标标示符[], 输出相应的子表达式, "0"代表全体, "1"代表第一个括号, 依次递加;通过对于问号项?是否匹配, 验证正则表达式的匹配式;代码:
#include <iostream>#include <string>#include <boost/regex.hpp>using namespace std;using namespace boost;bool valid(const boost::smatch& m){if(m[1].matched)return m[3].matched && (m[4].matched == 0 || m[4].str() == " ");elsereturn !m[3].matched && m[4].str() == m[6].str();}int main(){//问号(?)表示之前的可以选择std::string phone ="(\()?(\d{3})(\))?([-. ])?(\d{3})([-. ]?)(\d{4})";boost::regex r(phone);boost::smatch m;std::string s("(432)312-3425 9424151424 15");for(boost::sregex_iterator it(s.begin(), s.end(), r), end_it;it != end_it; ++it){if(valid(*it))std::cout << "valid : " << it->str() << std::endl;elsestd::cout << "not valid : " << it->str() << std::endl;}}
输出:
valid : (432)312-3425valid : 9424151424
作者:csdn博客 Spike_King