2

这很奇怪,我有以下 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 的正则表达式支持的行为)正确找到了匹配项。有人有什么想法吗?正则表达式看起来过度指定,因为其他一些字符串需要匹配的额外部分......

4

1 回答 1

1

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

于 2012-11-14T13:45:57.563 回答