1

例子:

input: (n!/(1+n))
output: frac{n!}{1+n}

input: ((n+11)!/(n-k)^(-1))
output: frac{(n+11)!}{(n-k)^(-1)}

input: (9/10)
output: frac{9}{10}

input: ((n+11)!/(n-k)^(-1))+(11)/(2)
output: frac{(n+11)!}{(n-k)^(-1)}+(11)/(2)

如果没有子括号,则以下正则表达式有效。

\(([^\/\)]*)\/([^\)]*)\)

以下是匹配括号

@\((([^()]++|\((?:[^()]++|(?R))+\))+)\)@

我只是不知道如何“组合”它们 - 编写一个正则表达式来处理除法平衡括号。

4

2 回答 2

1

我认为这样的事情应该有效:

((?:\w+|\((?1)\))(?:[+*^-](?1)|!)?)\/((?1))

现在,这可能并不完美,但这是一个想法:

第一组 $1 是((?:\w+|\((?1)\))(?:[+*^-](?1)|!)?),即:

文字括在括号中的平衡表达式),如果需要,后跟可选运算符和另一个平衡表达式。
这样写,我们可以(?1)在正则表达式中的任何地方使用来引用另一个平衡表达式。

工作示例:http: //ideone.com/PNLOD

于 2011-01-17T21:01:49.560 回答
0

我知道你已经接受了一个正则表达式,但你想要做的真正答案是一个适当的解析器......不,你不需要从头开始编写代码或重新发明轮子。虽然很多人讨厌 phpclasses,但您可以在其中找到的evalMath类对于解析和评估数学公式非常有用。有关如何使用和扩展它的详细信息,请参阅我对类似问题的回答。

于 2011-01-17T21:59:10.127 回答