regex_search返回true,但regex_match返回空匹配集

时间:2012-11-14 11:57:16

标签: 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的正则表达式支持的最接近的行为),正确找到了匹配。有人有任何想法吗?正则表达式看起来过于严格,因为其他一些字符串需要额外的匹配...

1 个答案:

答案 0 :(得分:1)

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