Java正则表达式匹配数学表达式模式

时间:2014-06-03 05:01:15

标签: java regex expression

我试图以递归方式或迭代方式匹配这样的字符串模式。

术语: - 可以是任何变量(字符串)或整数
表达式: - 术语+表达式或术语*表达式或术语/表达式或术语 - 表达式

我们的想法是找到像这样的数学表达式的匹配模式

ZING ^ 30 * SIN(45)+ 46 * LENGTH-20

我们假设该术语已准备好。

像往常一样,我会从一个非常糟糕的人开始...在java。

[[term\\+]*[term\\*]*[term\\\]*[term\\-]*]+term

2 个答案:

答案 0 :(得分:1)

您正在使用错误的工具来完成工作。根据定义,正则表达式不能用递归语法描述语法。查看乔姆斯基层次结构。你需要一个表达式解析器。查找Dijkstra Shunting-yard算法,或者递归下降表达式解析器'。

答案 1 :(得分:-1)

这看起来像是家庭作业,所以我不打算给你一个完整的答案。如果您知道如何使用中等复杂的正则表达式,那么您应该能够提出一个正则表达式来表示您的术语" - 它不应该太难。现在正式表达"表达"将是一个术语,然后是零次或多次出现"运算符后跟术语" (运营商是+-*/,也许^之一?)。也就是说,表达式将是" term"或" term op term",或" term op term op term"等。

注意:这就是你编写正则表达式的方式,它告诉你输入是否具有正确的格式,但它不会帮助你将其分解成部分。为此,您需要一个在循环中匹配的不同正则表达式(或两个)。不过,我无法说出你的要求是什么。