gpt4 book ai didi

C++ regex_match 行为

转载 作者:行者123 更新时间:2023-11-28 00:43:24 24 4
gpt4 key购买 nike

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

最佳答案

假设您使用的是 g++,您应该注意到 its implementation of <regex> (section 28) is incomplete .注意 basic_regex 的 list , sub_match , 和 match_results被宣布为“部分”。

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

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

关于C++ regex_match 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17606012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com