如何为这个表达式编写正则表达式

时间:2010-09-16 20:37:25

标签: regex

我想匹配这样的字符串:!!所以我认为输入有正确的元素,但它们是否可评估,留给评估者!

1+(2-3)*(4/5)

匹配它的正则表达式是什么,如下所示:([0-9 \ + - \ * / \(\)] +)?但这似乎无效。

5 个答案:

答案 0 :(得分:1)

正则表达式无法匹配任意算术公式。 Regexps仅描述常规语言,而算术公式使用递归语法。见http://en.wikipedia.org/wiki/Regular_expression#Formal_language_theory

如果限制嵌套深度,则可以使用正则表达式,但如果您想要一直使用匹配括号检测,则可能非常非常复杂。

答案 1 :(得分:1)

你不能,这不是regular language。虽然一些正则表达式实现可能提供额外的功能来匹配平衡括号。

答案 2 :(得分:1)

如果您只是要求进行字符验证,可以使用

^[0-9+*/()-]*$

您不需要转义字符类中的字符(方括号内)。如果你必须包含一个连字符,你必须把它放在最后,否则它将被视为字符范围操作符。

那就是说,请记住这只能保证你没有其他角色。它不会验证结构(正则表达式不是正确的工具)。但是,由于您声明评估者将处理输入,这可能适合您。

答案 3 :(得分:0)

如果你想匹配“1+(2-3)*(4/5)”,那么你可以使用这个正则表达式。

/1+\(2-3\)\*\(4\/5)/
那是什么?那不告诉你你想知道什么?那么,你想知道什么?您试图从字符串中提取哪些信息?

你不能只说“像这样的字符串”。你的问题不够明确。

答案 4 :(得分:0)

如果您的问题是评估方程是否有效,那么您将需要一个解析器来对表达式进行Tokenize而不是语法来评估表达式是否正确。

您无法使用正则表达式检查公式是否为平衡括号。这是因为正则表达式等同于确定性有限自动机。由于自动机是有限的,你永远不会有足够大的自动机来检查括号。