示例:
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))+\))+)\)@
我无法弄清楚如何“组合”它们 - 编写一个正则表达式来处理除法和平衡括号。
答案 0 :(得分:0)
我认为这样的事情应该有效:
((?:\w+|\((?1)\))(?:[+*^-](?1)|!)?)\/((?1))
现在,这可能并不完美,但这就是想法:
第一组$ 1是((?:\w+|\((?1)\))(?:[+*^-](?1)|!)?)
,即:
(A 文字)或(括号中包含平衡表达式),后跟可选运算符如果需要,另一个平衡的表达
以这种方式编写,我们可以在正则表达式中的任何位置使用(?1)
来引用另一个平衡表达式。
答案 1 :(得分:0)
我知道你已经接受了一个正则表达式,但你正在尝试做的真正答案是一个正确的解析器......不,你不需要从头开始编码或重新发明轮子。虽然很多人讨厌phpclasses,但是你可以找到的evalMath类对解析和评估数学公式非常有用。请参阅我对similar question的回答,了解如何使用和扩展它的详细信息。