博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【std::regex】C++文件路径正则表达式
阅读量:6802 次
发布时间:2019-06-26

本文共 969 字,大约阅读时间需要 3 分钟。

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

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

转载于:https://www.cnblogs.com/lenomirei/p/10846397.html

你可能感兴趣的文章
总结一下近期的面试题(一)
查看>>
Guava学习笔记:EventBus
查看>>
cordova-plugin-alipay-v2使用沙箱环境
查看>>
OSC android app 退出方法改进
查看>>
android UI之button异步处理
查看>>
quantum 相关问题总结
查看>>
Hadoop学习
查看>>
深入了解android平台的jni---编译ffmpeg源码
查看>>
计算机常用端口一览表
查看>>
【转载】Unity3d引用外部的dll
查看>>
在Oracle Enterprise Linux中安装Oracle 11g
查看>>
CentOs7 急速安装 MongoDB
查看>>
Centos6.5 git 源码安装
查看>>
android自定义TabView实现圆角列表
查看>>
HDFS之SequenceFile和MapFile
查看>>
12, Pipe
查看>>
JAVA 7 中遍历文件目录
查看>>
MySQL命令行
查看>>
ListView的使用
查看>>
分布式Session的几种实现方式
查看>>