zoukankan      html  css  js  c++  java
  • 【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() << '
    ';
        }
    
  • 相关阅读:
    MySQL索引
    MySQL事物
    《软件设计师》——计算机网络
    《软件设计师》考点分布
    《软件设计师》——UML
    《软件设计师》——法律法规与标准化知识
    《软件设计师》——多媒体基础
    《软件设计师》——信息安全基础
    《软件设计师》——数据库系统
    《软件设计师》——数据结构和算法基础
  • 原文地址:https://www.cnblogs.com/lenomirei/p/10846397.html
Copyright © 2011-2022 走看看