有一条线像(..(число)..). 可以有一个到多个括号,但括号放置正确 - 例如,
(((((4)))((5))))
如何去掉括号?我做了这样的事情 -
regex rx("\\((\\d*)\\)");
然后反复 - 直到截止日期改变 - 替换:
string out = s;
while( (out = regex_replace(s,rx,"$1")) != s) s = out;
但在我看来,嵌套括号可以一次性删除,我只是不知道如何。
告诉我谁知道。
有一条线像(..(число)..). 可以有一个到多个括号,但括号放置正确 - 例如,
(((((4)))((5))))
如何去掉括号?我做了这样的事情 -
regex rx("\\((\\d*)\\)");
然后反复 - 直到截止日期改变 - 替换:
string out = s;
while( (out = regex_replace(s,rx,"$1")) != s) s = out;
但在我看来,嵌套括号可以一次性删除,我只是不知道如何。
告诉我谁知道。
这正是您问题中的方法,如果正则表达式库不支持递归或平衡构造,则使用此方法。
std::regex也不支持他们。如果需要,可以使用
boost::regex支持递归的库:查看C++ 代码如何工作的示例。
正则表达式在这里
细节
\(- 象征((?=\(*(\d+)\))- 一个正向查找块,需要(,然后是 1 个或多个数字(在子模式 #1 中捕获),然后)紧跟在当前位置之后(?>\d+|(?R))*- 0 次或多次重复 1+ 位或整个表达式(递归)\)- 象征)