C++中正则表达式 的 子表达式(subexpressions) 的数据验证
当前位置:以往代写 > C/C++ 教程 >C++中正则表达式 的 子表达式(subexpressions) 的数据验证
2019-06-13

C++中正则表达式 的 子表达式(subexpressions) 的数据验证

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

    关键字:

在线提交作业