std::regexC++文件路径正则表达式

Posted lenomirei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了std::regexC++文件路径正则表达式相关的知识,希望对你有一定的参考价值。

今天代码中遇到使用正则表达式匹配一个文件路径的问题,需要验证传入的文件路径是否合法,学习了简单的正则表达式的写法后,简单写了如下代码,在网上找了一些在线测试正则表达式的网站,测试可以通过。

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';
    }

以上是关于std::regexC++文件路径正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

调整 Django URL 中的正则表达式以匹配文件路径

用于提取部分文件路径的正则表达式

c# 中用于文件夹路径验证(远程路径、FTP 路径、本地系统文件夹路径等)的单个正则表达式 [关闭]

在 C# 中使用正则表达式从完整路径解析文件名

正则表达式和相对文件路径

不需要boost::regex库的能进行正则表达式的代码?