c++ - regex_search 返回 true,但 regex_match 返回空匹配集

标签 c++ regex std

这很奇怪,我有以下 std::regex (rx)

\{\{alternate form of\s*\|(?:\d=)?(.*?)([\|#][^\|}]*)*\}\}

当给定此字符串 (str) 时,哪个 regex_search 返回 true

{{alternate form of|abate|nodot=1}} {{qualifier|abbot}}.

但是当我调用 regex_match(str, m, rx) 时,匹配集 m 是空的。在 RegexBuddy 中使用 JavaScript 模式(这似乎是我能找到的最接近 VS2012 的正则表达式支持的行为)可以正确找到匹配项。有人有什么想法吗?正则表达式看起来过于详细,因为一些其他字符串需要匹配额外的部分...

最佳答案

regex_search 匹配目标字符串的任何部分。 regex_match 匹配整个字符串。正则表达式匹配目标字符串的第一部分,“{{alternate form of|abate|nodot=1}}”。这就是 regex_search 找到的内容。这不是整个字符串,这就是 regex_match 找不到匹配项的原因。

关于c++ - regex_search 返回 true,但 regex_match 返回空匹配集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13378379/

相关文章:

java - 用于限制验证十六进制值从 0000 到 7F7F 的正则表达式

c++ - 将 std::vector<const Type*> 转换为 const std::vector<T, A> &Vec

c++ - 将 vector <vector<int>>作为平面数组访问

C++ std::shared_ptr 递增和递减引用计数的竞赛

c++ - "The C++ compiler "/usr/bin/c++ "is not able to compile a simple test program."尝试安装 OpenCV 时

Java Reg 接受不在 [0-9]*[ -/]{0,1}[0-9]* 中的 * - 这是一个错误吗?

c# - 正则表达式在一个词中找到一组正则表达式

c++ - 必须在传递给 C 运行时函数的 QWidget 和无效参数之前构造 QApplication

c++:将指针传递给基类时访问派生类方法?

python - 将 C++ 抽象类作为参数传递给 Cython