0

我正在使用 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

4

1 回答 1

3

假设您使用的是 g++,您应该注意它的<regex>(第 28 节)的实现是不完整的。注意 、 和 的列表basic_regexsub_match声明match_results为“部分”。

有关 g++ 的更多信息,我认为一年前的这篇文章仍然是相关的(就像这个错误报告一样)。

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

于 2013-07-12T01:35:51.150 回答