【发布时间】:2011-07-25 10:50:08
【问题描述】:
在java中,我正在尝试编写一个正则表达式,它将匹配数学表达式中的一个单元,即运算符之间的事物
我的意思是,在像 1 + [1 + 2] 这样的表达式中,正则表达式应该匹配第一个 1,然后是 [1 + 2]。
我所拥有的是 *[([-+]?\d+(\.\d+)?)(\[.+\])] *
其中 ([-+]?\d+(\.\d+)?) 应该匹配任何数字并且
(\[.+\])
应该匹配括号内的内容,但它不起作用...由于某种原因,它正在匹配诸如 ']' 和 ' ' 之类的内容。
任何帮助都会很棒:)
不幸的是,这是练习的一部分,所以我只能使用基本的 java 库……这也是正则表达式的练习。我在这里缺少一些基本的东西吗?
【问题讨论】:
-
平衡良好的括号不是常规语言。忘记使用正则表达式解析数学表达式。
-
您实际上不想使用正则表达式来执行此操作。您想使用分词器来拆分您的字符串。
-
@CanSpice 这是 2011 年,我们使用
.split()而不是StringTokenizer:-) -
实际上,标记化是常规部分。 OP 似乎需要一个解析器。
-
除此之外,还可以匹配示例中显示的复杂度的表达式。但我怀疑正则表达式甚至会因为领先的 * 而编译
标签: java regex math parentheses