正则表达式视觉工作室

regex visual studio

本文关键字:工作室 视觉 正则表达式      更新时间:2023-10-16

我计划使用以下正则表达式来捕获文件的路径和名称:

std::regex capture_path_name_file("(.+)\([^\]+)\.[^\]+$");

但是在运行时(我使用的是Visual Studio),我收到正则表达式错误

error_brack: the expression contained mismatched [ and ]

为了查明原因,我尝试了以下正则表达式:

std::regex test("[^\]")

我得到了同样的错误。

我已经在 regex101.com 中测试了我的正则表达式(略有不同,我不得不使用 . 而不是 \.

感谢您的任何帮助。

遇到的问题是\在常规字符串文本中被视为 1 个文字符号。Biffen 在他的评论中很好地解释了它,[^\]被视为[^]]被视为文字]而不是结束字符类分隔符(并且没有匹配的]进一步关闭字符类)。

正确的答案是:使用_splitpath_s

如果你想进一步玩正则表达式,你可以这样修复它:

#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 中。请注意,扩展必须存在。