【std::regex】C++文件路徑正則表達式


今天代碼中遇到使用正則表達式匹配一個文件路徑的問題,需要驗證傳入的文件路徑是否合法,學習了簡單的正則表達式的寫法后,簡單寫了如下代碼,在網上找了一些在線測試正則表達式的網站,測試可以通過。

std::regex match("^[a-zA-Z]:(\\[a-zA-Z0-9]+)+$");
std::string path("D:\\test");

if (!std::regex_match(path, match)) {
    cout << "!!!" << endl;
}

但是整到C++里面后,結果報錯了,報錯原因是regex_error caught: regex_error(error_brack): The expression contained mismatched [ and ].

我開始懷疑是不是正則表達式在\\[部分把\\[組合在了一起,我的本意是匹配一個\字符結果卻變成了匹配一個[字符,導致方括號表達式只剩下右半邊所以報錯。

本身C++用\來當做轉義符,則\\表示一個正常的\,如果放在正則表達式中的話,\\表示一個\字符,那么在C++中可能\\\\才是匹配\的正確做法

有點繞,首先先用C++的思路轉換字符串為正則表達式,然后再按照正則表達式語法解析,有點不適合閱讀,不知道有什么方法,可以讓這種寫法變得更加可讀方便維護。

最后的調整算是可以比較正常工作的是如下的表達式,還是不夠完善,還在改善

    try {
        std::regex match("^[a-zA-Z]:(\\\\[a-zA-Z0-9]+)+$");
        std::string path("D:\\test");

        if (!std::regex_match(path, match)) {
            cout << "!!!" << endl;
        }
    }

    catch (const std::regex_error& e) {
        std::cout << "regex_error caught: " << e.what() << '\n';
    }


免責聲明!

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



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