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