gpt4 book ai didi

c++ - 使用或匹配正则表达式

转载 作者:行者123 更新时间:2023-11-30 05:26:13 26 4
gpt4 key购买 nike

我想使用正则表达式从 -afooa--bfoob- 中提取 foo

我首先尝试了这个(使用 boost):

std::string input = "-afooa-";
boost::regex re("-(?:a|b)(.*)(?:a|b)-");
boost::smatch what;
bool isMatchFound = boost::regex_match(input, what, re);

if (isMatchFound && what.size() == 2)
{
std::cout << what[1];
}

这有效,但允许 -afoob-....所以我尝试更新我的正则表达式,在阅读正则表达式文档后,我觉得我需要一个带有“非标记括号”的 or 条件,并且结束了这个正则表达式 -(?:a(.*)a|b(.*)b)- 但随后找到了两个匹配项 "foo"""...

我做错了什么?

最佳答案

您可以在第一个 (a|b) 周围使用捕获组,然后使用反向引用:

-(a|b)(.*?)\1-

参见 regex demo .这次您将在 what[2] 中得到结果。

在C++中,声明

boost::regex  re("-(a|b)(.*?)\\1-");

我还建议使用惰性点 .*? 以获取 ab 之后的子字符串到 下一个 ab 的第一个 出现。

仅供引用:regex_match 将仅匹配完整 字符串。如果您要查找部分匹配项,请使用 regex_search

为了完整性:如果您想将结果放入第 1 组(通过 what[1]),您需要分支重置 分组构造:

-(?|a(.*?)a|b(.*?)b)-

参见 Boost regex referencea demo .

关于c++ - 使用或匹配正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37882576/

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