运行regex- get文件名时未经检查的异常,而不延伸文件路径

时间:2016-11-29 08:03:43

标签: c++ regex

我有这个简单的程序

string str = "D:\Praxisphase 1 project\test\Brainstorming.docx";
regex ex("[^\\]+(?=\.docx$)");
if (regex_match(str, ex)){
    cout << "match found"<< endl;
}

期望结果是真的,我的正则表达式正在运行,因为我已经在网上尝试过,但是当尝试在C ++中运行时,应用程序会抛出未经检查的异常。

1 个答案:

答案 0 :(得分:1)

首先,在定义正则表达式时使用原始字符串文字以避免出现反斜杠问题(\.不是有效的转义序列,需要"\\."R"(\.)")。其次,regex_match需要完整字符串匹配,因此,请使用regex_search

#include <iostream>
#include <regex>
#include <string>
using namespace std;

int main() {
    string str = R"(D:\Praxisphase 1 project\test\Brainstorming.docx)";
    // OR
    // string str = R"D:\\Praxisphase 1 project\\test\\Brainstorming.docx";
    regex ex(R"([^\\]+(?=\.docx$))");
    if (regex_search(str, ex)){
        cout << "match found"<< endl;
    }
    return 0;
}

请参阅C++ demo

请注意R"([^\\]+(?=\.docx$))" = "[^\\\\]+(?=\\.docx$)",第一个中的\ literal 反斜杠(并且您需要两个正则表达式模式中的反斜杠来匹配{ {1}}符号),在第二个中,需要4个反斜杠来声明与输入文本中的单个\匹配的2个字面反斜杠。