Найти строку внутри самой внешней скобки

Скажем, что у меня есть строка, содержащая как множественные множества, так и вложенные скобки. Я хочу извлечь только строку в первой встречной скобке, включая любые вложенные скобки, которые она содержит.

Например:

это (есть (возможно)) тест (а может и нет)

Я хочу извлечь:

это (возможно)

Я считаю, что это можно сделать без использования регулярных выражений, благодаря чему я могу легко это сделать.

Итак, мой вопрос в том, как это можно выполнить без регулярных выражений?

Псевдокод:

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 

Чтобы псевдокод был единственным ответом, я взял на себя ответ на это, используя стандартные алгоритмы. Учитывая const string foo{ "this (is(maybe)) a test (and maybe not)" } для решения можно использовать const string foo{ "this (is(maybe)) a test (and maybe not)" } c ++ 14 :

 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; }); 

Отсюда, если оба start и finish не являются cend(foo) строка действительна и может быть получена из string(next(start), finish) ( Live Example ).

Возможно, это так же хорошо, как и на C ++. Я думаю, это просто принятие желаемого за действительное, что есть что-то там, чтобы соответствовать круглым скобкам и найти значение.