子表達式(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