我有这个简单的程序
string str = "D:\Praxisphase 1 project\test\Brainstorming.docx";
regex ex("[^\\]+(?=\.docx$)");
if (regex_match(str, ex)){
cout << "match found"<< endl;
}
期望结果是真的,我的正则表达式正在运行,因为我已经在网上尝试过,但是当尝试在C ++中运行时,应用程序会抛出未经检查的异常。
答案 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个字面反斜杠。