我正在使用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
答案 0 :(得分:3)
假设您使用的是g ++,您应该注意its implementation of <regex>
(section 28) is incomplete。请注意,basic_regex
,sub_match
和match_results
的商家信息被宣布为“部分”。
有关g ++的更多信息,我认为this post from a year ago仍然相关(就像this bug report)。
这可以解释为什么它没有给出你期望的结果。您可能希望在此期间尝试使用Boost正则表达式。