【发布时间】:2011-01-17 20:01:40
【问题描述】:
例子:
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))+\))+)\)@
我只是不知道如何“组合”它们 - 编写一个正则表达式来处理除法和平衡括号。
【问题讨论】:
-
正则表达式不是复杂解析的好工具 - 尤其是,如果它需要匹配平衡的文本。您可以使用某些正则表达式变体提供的扩展来破解某些东西,但您确实希望使用实际的解析器来处理此类事情。
-
问题是,我是如此接近。我对解析器一无所知,实现它需要的时间比我想要的要多。我知道正则表达式是可能的,对我来说这是最简单的方法。
-
我添加了一个答案,至少适用于测试用例。随意修改它 - 它远非完美(你可以添加所有格量词,如果你勇敢的话,也许可以添加一元
+)。它最大的问题是将所有/视为一个分数,没有运算符的顺序:a+2/3+b->(a+2)/(3+b)。
标签: php regex pcre recursive-regex