繁体   English   中英

如何为该表达式编写正则表达式

[英]How to write the regex for this expression

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

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

用于匹配此内容的正则表达式是什么,例如:([0-9 \\ +-\\ * / \\(\\)] +)? 但这似乎不起作用。

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

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

您不能,这不是常规语言 尽管某些正则表达式实现可能会提供其他功能以匹配平衡的括号。

如果您只要求验证字符,则可以使用

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

您无需对字符类中的字符进行转义(在方括号内)。 而且,如果必须包含连字符,则必须将其放在最后,否则它将被视为字符范围运算符。

也就是说,请记住,这只会保证您没有其他字符。 它不会验证结构(正则表达式不是正确的工具)。 但是,由于您说过将由评估人员处理输入,因此这可能适合您。

如果要匹配“ 1+(2-3)*(4/5)”,则可以使用此正则表达式。

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

那是什么? 那没有告诉你你想知道什么吗? 好吧,那你想知道什么? 您试图从字符串中提取什么信息?

您不能只说“这样的字符串”。 您的问题还不够清楚。

如果您的问题是评估方程是否有效,则需要使用语法分析器对表达式进行标记化,而不是使用语法来评估表达式是否正确。

您不能使用正则表达式检查方程式是否为平衡括号。 这是因为正则表达式等效于确定性有限自动机。 由于自动机是有限的,因此您永远不会拥有足够大的自动机来检查括号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM