我有以下代码:
include <regex>
include <string>
TCHAR basePath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, basePath);
wstring test(&basePath[0]); //convert to wstring
string test2(test.begin(), test.end()); //and convert to string.
std::regex rBase("(.*my-dir)");
std::smatch sm;
std::regex_match(test2, sm, rBase);
但是,sm总是返回空
基本上,如果我有以下目录结构:
E:\foo\bar\baz\my-dir\post1\dir2
我需要返回
"E:\foo\bar\baz\my-dir"
如果我运行它,比如说python或者javascript,那么正则表达式似乎有效,但是在C ++中没有这样做
我缺少什么或有什么替代方案?
由于
答案 0 :(得分:1)
std::regex_match
检查整个字符串是否与正则表达式匹配,而不仅仅是它的任何部分。
使用std::regex_search
代替std::regex_match
或使用与整个字符串匹配的正则表达式,例如"(.*my-dir).*"
,并使用sm[1].str()
提取子匹配。