我计划使用以下regex捕获文件的路径和名称:
std::regex capture_path_name_file("(.+)\\([^\\]+)\\.[^\\]+$");但是当运行时(我使用的是visual studio),我会得到regex错误
error_brack: the expression contained mismatched [ and ]为了找出原因,我尝试了以下正则表达式:
std::regex test("[^\\]")我也犯了同样的错误。
我已经在regex101.com中测试了我的正则表达式(我不得不使用\.而不是\\.)。
谢谢你的帮助。
发布于 2016-01-20 09:03:43
您所遇到的问题是因为\\在常规字符串文本中被视为1字面值的\符号。比芬在他的评论中解释得很好,[^\\]被视为[^\],]被视为文字],而不是结束字符类分隔符(并且没有匹配的]来进一步关闭字符类)。
正确的答案是:使用_splitpath_s。
如果您想进一步使用regex,可以这样修复它:
#include <iostream>
#include <regex>
using namespace std;
int main() {
std::regex rex1(R"((.+?)([^\\.]+\.[^\\.]+)$)");
std::smatch m;
std::string str = "c:\\Python27\\REGEX\\test_regex.py";
if (regex_search(str, m, rex1)) {
std::cout << "Path: " << m[1] << std::endl;
std::cout << "File name: " << m[2] << std::endl;
}
return 0;
}使用原始字符串文本,可以避免与转义相关的大多数问题。使用R"((.+?)([^\\.]+\.[^\\.]+)$)",它将匹配并捕获到第1组的文件文件夹路径,并将扩展名捕获到第2组。请注意,扩展必须存在。
https://stackoverflow.com/questions/34895119
复制相似问题