C++ 正则表达式不适用于 PCRE 表达式?

标签 c++ regex

我有以下代码:

  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++ 中则不行

我缺少什么或有哪些替代方案?

谢谢

最佳答案

std::regex_match 检查整个字符串是否匹配正则表达式,而不仅仅是它的任何部分。

使用 std::regex_search 而不是 std::regex_match 或使用匹配整个字符串的正则表达式,例如 "(.*my-dir ).*",并用sm[1].str()提取子匹配。

关于C++ 正则表达式不适用于 PCRE 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28418314/

相关文章:

regex - Dart RegExp 字边界等效

c++ - 用作函数参数时如何定义到类模板工作的转换

c++ - std::function 的解释

c++ - 对类模板的静态变量的 undefined reference

regex - 转义加号不起作用

regex - sed - 如果包含以 'can' t find label' 结尾,则删除多行

c++ - 在 mac 上编译 STASM

C++:如何为字符数组创建比较函数?

mysql - 如何使用 REGEXP 创建 mysql View

jquery - 正则表达式:忽略括号和圆括号之间