子運算式(subexpressions)的 資料驗證(data validation), 可以通過括弧"()"分解Regex的子運算式;
然後使用下標標示符[], 輸出相應的子運算式, "0"代表全體, "1"代表第一個括弧, 依次遞加;
通過對於問號項?是否匹配, 驗證Regex的匹配式;
代碼:
#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
更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/