Java正则表达式分别处理嵌套匹配的能力

时间:2016-11-02 13:28:09

标签: java android regex

我完全无法弄清楚如何编写模式,用我的正则表达式来实现乳胶中的嵌套分数。

以下是几个示例用户输入:

\\Final version with closing "moveout" phrase
regexPattern = Pattern.compile(fraction(?<upper>.*?)over(?<lower>.*?)moveout);
regexMatcher = regexPattern.matcher(userInput);
mathFormulaInLaTeX = regexMatcher.replaceAll(\\frac{${upper}} {${lower}});

\\Starting version without "over" keyword
regexPattern = Pattern.compile(fraction(?<upper>.*));
regexMatcher = regexPattern.matcher(userInput);
mathFormulaInLaTeX = regexMatcher.replaceAll(\\frac{${upper}} {});

这是我的正则代码(我制作了部分版本):

temp

通过以下输入,我得到了结果:

输入:&#34; fractionx + 3over5moveout + 2&#34;

(最终的正则表达式只适用于一小部分) enter image description here

输入:&#34; fractionfractionx + 1&#34;

(启动版本没有&#34; over&#34;关键字,嵌套分数无法正常工作) enter image description here

输入:&#34; fractionfractionx + 1over7moveoutover3moveout + 1&#34;

(带有嵌套分数的最终正则表达式版本添加了moveout单词) enter image description here

输入:&#34; fractionfractionfractionx + 3over3moveoutoverx + 2moveoutover7moveout + 1&#34;

(完全错误分类)

enter image description here

对于任何数量的嵌套分数,是否有一个整洁的模式解决方案,以摆脱&#34; moveout&#34;单词显示并使嵌套分数像这样:

enter image description here

我感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

正如评论中所说,这不是一个好主意。数学表达式,即使是简单的表达式,也不是regular language - 它们是context-free grammar。虽然假设有match使用现代正则表达式引擎的任意数学表达式,但尝试用它们解析一个充其量是蛮干的。我建议使用rolling your own lexical analyzer或使用类似ANTLR的内容。