C++基礎-正則實戰(日期拆分regex_match ,符號拆分sregex_token_iterator, 郵箱的查找 regex_search)


1.日期拆分 由於日期是固定格式的,如1994/01/08 因此使用regex_match 可以進行結果的匹配

int main3()
{
    //1999 12 25
    regex reg("^(\\d{4})/(0?[1-9]|1[0-2]])/(0?[1-9]|[1-2][0-9]|3[0-1])$");
    string str1;
    //cin >> str1;
    getline(cin, str1); //遇到斜跨n結束
    cout << str1;
    smatch m; //幫助轉換
    if(regex_match(str1, m, reg))
    {
        //m[0]忽略
        int year = atoi(m[1].str().c_str()); //把字符串轉換為整數
        int month = atoi(m[2].str().c_str());
        int day = atoi(m[3].str().c_str());
        cout << "\n\n";
        cout << year << month << day <<endl;
        cout << "OK";
    }else{
        cout << "NO";
    }
    cin.get();
    return 0;
}

2.符號的拆分,如sregex_token_iterator 可以進行循環的拆分

int main()
{
    regex reg("\\s*[,#,:]+\\s*");
    //char str[100] = {0};
    string str; //123, 123, 123,
    getline(cin, str);
    //迭代器
    sregex_token_iterator end; //拆分字符串

    vector<string>myv;
    for(sregex_token_iterator it(str.begin(), str.end(), reg,-1); it != end; it++) {
        myv.push_back(*it);
        cout << *it << endl;
    }
    for(auto i : myv)
    {
        cout << i << endl;
    }
}

3.根據匹配循環查找里面的郵箱信息

//查找
int main2()
{
    regex reg("\\w+([-+.]w+)*@\\w+([-.]\\w+)*.\\w+([-.]\\w+)*");
    //char str[100] = {0};
    string mystr("未認證暫不開發 3023476735@qq.com 未認證 123456@qq.com");
    //迭代器
    smatch m;
    if(regex_search(mystr, m, reg))
    {
        for(int i = 0; i != m.size(); i++) {
            cout << m[i].str().c_str() << endl;
        }
        cout << "can find";
    } else {
        cout << "can not find";
    }
    cin.get();
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM