我有一个xml文件,格式如下
<Function>
<Name>BoxedClip</Name>
<Instance>CalculateFormula</Instance>
<Formula>if((ELIGIBLE_SHORT_QTY > 0),-1*min(LONG_QTY ,(-1 * SHORT_QTY)) * DIV_AMOUNT * (if ((ELIGIBLE_SHORT_QTY != 0), DLR_TIMES_SHORT_QTY / ELIGIBLE_SHORT_QTY, 0) - if ((ELIGIBLE_LONG_QTY != 0), DLR_TIMES_LONG_QTY / ELIGIBLE_LONG_QTY, 0))/100,0)</Formula>
</Function>
<Function>
<Name>ExcessBorrowClipUSD</Name>
<Instance>CalculateFormula</Instance>
<Formula>if(((-1*BORROW_QTY) >= (-1*SHORT_QTY)),(BORROW_QTY-SHORT_QTY)* DIV_AMOUNT_USD * (if ((ELIGIBLE_SHORT_QTY != 0), DLR_TIMES_SHORT_QTY / ELIGIBLE_SHORT_QTY, 0) - if ((ELIGIBLE_LONG_QTY != 0), DLR_TIMES_LONG_QTY / ELIGIBLE_LONG_QTY, 0)) / 100,0)</Formula>
</Function>
我需要用三元运算符递归替换所有if条件。
我想出了以下表达式:
if[^(]*\(([^,]+),([^,]+),([^,()]+)\)
替换为($1?$2:$3)
这适用于else子句中没有括号的所有if子句。
但是对于任何如果在else子句中有括号,在上面的第三个记忆模式中,我需要它忽略所有匹配的括号并停在第一个不匹配的右括号。