C++中正则表达式 的 子表达式(subexpressions) 的数据验证
子表达式(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() == " "); else return !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; else std::cout << "not valid : " << it->str() << std::endl; } }
输出:
valid : (432)312-3425 valid : 9424151424
作者:csdn博客 Spike_King