C ++ regex_match行为

时间:2013-07-12 01:06:33

标签: c++ regex stl

我正在使用C ++正则表达式。无法掌握以下编程输出。

#include <iostream>
#include <regex>
#include <algorithm>
#include <string>
using namespace std;

int main(){
  regex r("a(b+)(c+)d");    
  string s ="abcd";
  smatch m; 
  cout << s << endl;
  const bool b = regex_match(s,m, r);
  cout << b <<endl; // prints 1 - OK
  if(b){
    cout << m[0] << endl; // prints abcd - OK 
    cout << m[1] << endl; // prints ab - Why? Should it be just b?
    cout<<  m[2] << endl; // prints bc - Why? Should it be just c?
  }

}

我是否接触过其他语言的正则表达式,括号应该与字符串的捕获部分相匹配?所以输出应该是

1
abcd
b
c

编辑: 我正在使用g ++ 4.6

1 个答案:

答案 0 :(得分:3)

假设您使用的是g ++,您应该注意its implementation of <regex> (section 28) is incomplete。请注意,basic_regexsub_matchmatch_results的商家信息被宣布为“部分”。

有关g ++的更多信息,我认为this post from a year ago仍然相关(就像this bug report)。

这可以解释为什么它没有给出你期望的结果。您可能希望在此期间尝试使用Boost正则表达式。