使用三元运算符替换if(,,)的正则表达式?:

时间:2016-10-13 12:59:09

标签: regex if-statement ternary-operator

我有一个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子句中有括号,在上面的第三个记忆模式中,我需要它忽略所有匹配的括号并停在第一个不匹配的右括号。

0 个答案:

没有答案