在最外侧括号内查找字符串

时间:2015-03-04 19:31:39

标签: c++ string nested parentheses repeat

假设我有一个包含多个集合和括号嵌套的字符串。我想只提取遇到的第一个括号中的字符串,包括它包含的任何嵌套括号。

例如:

  

这(可能是)一个测试(也许不是)

我想提取:

  

是(也许)

我相信这可以在不使用正则表达式的情况下完成,我可以轻松地完成它。

所以我的问题是如何在没有正则表达式的情况下实现

2 个答案:

答案 0 :(得分:5)

伪代码:

 iterate over chars
 if char is (
   increment counter
   store position of first ( only
 if char is )
   decrement counter
   if counter == 0
      use index of current char and position of first ( to get substring

答案 1 :(得分:3)

以免伪代码成为我自己用标准算法回答这个问题的唯一答案。鉴于const string foo{ "this (is(maybe)) a test (and maybe not)" } 可以用来解决这个问题:

const auto start = find(cbegin(foo), cend(foo), '(');
const auto finish = find_if(start, cend(foo), [count = 0](const char i) mutable {
    if (i == '('){
        count++;
    }
    else if (i == ')'){
        count--;
    }
    return count <= 0; });

从此处开始,如果startfinish都不是cend(foo),则该字符串有效且可以从string(next(start), finish)Live Example)获取。

这可能是与C ++一样好的解决方案。我想这只是一厢情愿的想法,那里有一些与括号匹配并找到价值的东西。