You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

需求:C++正则表达式迭代从右到左移除平衡方括号

迭代式解决方案(修复后)

原代码的问题在于正则表达式\[[^\[\]]*\]$仅能匹配无嵌套的最右侧方括号对,无法处理包含嵌套结构的平衡括号。我们需要改用支持递归匹配的正则,来识别最右侧的任意深度嵌套平衡方括号对。

修复后的代码如下:

#include <iostream>
#include <string>
#include <regex>

std::string removeSqr(const std::string input)
{
    std::string result = input;
    // 递归正则:匹配最右侧的平衡方括号对(支持嵌套)
    const std::regex balanced_bracket(R"(\[((?:[^[\]]|(?R))*)\]$)");
    std::smatch match;
    
    while (std::regex_search(result, match, balanced_bracket))
    {
        result = match.prefix().str();
        std::cout << result << std::endl;
    }
    
    std::cout << "final : " << result << std::endl;
    return result;
}

int main()
{
    // 测试案例1:abc[d]n[r][][5]
    removeSqr("abc[d]n[r][][5]");
    // 测试案例2:abc[[]][]
    removeSqr("abc[[]][]");
    // 测试案例3:abc[[s]5][w]
    removeSqr("abc[[s]5][w]");
    return 0;
}

正则说明

\[((?:[^[\]]|(?R))*)\]$ 拆解:

  • \[:匹配左方括号
  • (?:[^[\]]|(?R))*:非捕获组,匹配任意非括号字符,或者递归匹配整个正则(处理嵌套的平衡括号)
  • \]:匹配右方括号
  • $:锚定到字符串末尾,确保只匹配最右侧的平衡括号对

运行测试案例的输出完全符合预期:

  • 输入abc[d]n[r][][5]:输出依次为abc[d]n[r][]、abc[d]n[r]、abc[d]n
  • 输入abc[[]][]:输出依次为abc[[]]、abc
  • 输入abc[[s]5][w]:输出依次为abc[[s]5]、abc

一次性正则替换方案

如果不需要输出每一步的处理过程,可直接用正则替换掉字符串末尾所有连续的平衡方括号对,一步得到最终结果:

#include <iostream>
#include <string>
#include <regex>

std::string removeAllTrailingBalancedBrackets(const std::string input)
{
    // 匹配末尾一个或多个连续的平衡方括号对(支持嵌套)
    const std::regex trailing_brackets(R"((?:\[((?:[^[\]]|(?R))*)\])+$)");
    return std::regex_replace(input, trailing_brackets, "");
}

int main()
{
    std::cout << removeAllTrailingBalancedBrackets("abc[[s]5][w]") << std::endl; // 输出abc
    std::cout << removeAllTrailingBalancedBrackets("abc[d]n[r][][5]") << std::endl; // 输出abc[d]n
    return 0;
}

正则说明

(?:\[((?:[^[\]]|(?R))*)\])+$ 拆解:

  • (?:...):非捕获组,单个平衡方括号对的匹配规则(同迭代方案)
  • +:匹配一次或多次连续的平衡方括号对
  • $:锚定到字符串末尾,确保只替换末尾的连续括号对

内容的提问来源于stack exchange,提问作者yasara malshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 03:42:38