我想匹配这样的字符串:!!所以我认为输入有正确的元素,但它们是否可评估,留给评估者!
1+(2-3)*(4/5)
匹配它的正则表达式是什么,如下所示:([0-9 \ + - \ * / \(\)] +)?但这似乎无效。
答案 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而不是语法来评估表达式是否正确。
您无法使用正则表达式检查公式是否为平衡括号。这是因为正则表达式等同于确定性有限自动机。由于自动机是有限的,你永远不会有足够大的自动机来检查括号。