С++ Регулярные выражения. Рекурсия?

312
10 апреля 2017, 07:22

Здравствуйте, имею задачу получить список содержимого между пар (...) скобок в любом выражении. Т.е например: ( тест1(тест2(тест3)). В данном примере я должен получить выражения тест2(тест3) и тест3, но не получить тест1, т.к нет соответствующей закрывающей скобки. (аналогично должно быть и с открывающими, если нет пары, выражение игнорируется.) Если я правильно понял, конечно.

Задание дословно:

1)проверить, правильно ли в тексте расставлены круглые кобки(т.е находится ли правее каждой открывающейся скобки закрывающаяся и левее закрывающейся - открывающаяся) 2) вывести содержимое правильно проставленных скобок в виде списка.

На данный момент составил что-то вроде этого: ((?:[^()]+|\g<2>*)) ссылка на regex101 для удобства. Но я делаю что-то не так, вроде тут нужно использовать рекурсию, но я не могу понять как. Подскажите, как правильно?

Answer 1

Мне кажется, все куда проще...
Например, для №1 просто идете по порядку, для каждой открывающейся скобки прибавляете 1, для закрывающей - вычитаете... И следите, не опустится ли сумма ниже нуля :)

Что от вас хотят в №2 - я что-то не очень понял. Поясните подробнее - уверен, и тут регулярные выражения ни при чем...

READ ALSO
Расширение QTableView по контенту

Расширение QTableView по контенту

Есть QTableView, нужно чтобы ее размеры подгонялись по размеру содержимогоНо не флаг Stretch в хедерах

215
Присвоение итераторов

Присвоение итераторов

Предположим, у меня есть std::vector<int> vec1 размера nТакже есть RandomAccessIterator begin и end, которые принадлежат другому вектору vec2 такого же размера

252
Поиск самого длинного слова в строке. С++

Поиск самого длинного слова в строке. С++

Нужно найти самое длинное слово в строкеBAЖНО! Без класса string! проблема в том что код, не работает

370