作业帮 > 综合 > 作业

如何使用正则表达式判断用户输入的公式是否合法.允许四则混合运算和多重括号.

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/08/28 08:00:35
如何使用正则表达式判断用户输入的公式是否合法.允许四则混合运算和多重括号.
^
!.*[^\d+\-*/\(\)]) #规则0,字符串必须由数字,符号和括号组成
!.*\)\d) #规则A,不允许右括号后接数字
!.*[+\-*/]([+\-*/]|\))) #规则B,不允许符号后面接符号或右括号
!.*\([+*/]) #规则C,不允许左括号后接运算符(- 可以表示负号)
!.*(\d|\))\() #规则D,不允许左括号前有数字或右括号
=\d|\-|\() #规则E,字符串开头必须是,数字,负号,左括号中的一个
=.*(\d|\))$) #规则F:结尾必须是数字或者右括号
[^\(\)]*
#开始匹配,捕获括号,使用平衡组来判断括号数量是否相等,需要.NET的支持
(
(
'open'\()
[^\(\)]*
)+
(
'-open'\))
[^\(\)]*
)+
)*
(open)(?!)) #规则G:左右括号数量必须相等
$
最终的正则表达式为:
^(?!.*[^\d+\-*/\(\)])(?!.*\)\d)(?!.*[+\-*/]([+\-*/]|\)))(?!.*\([+*/])(?!.*(\d|\))\()(?=\d|\-|\()(?=.*(\d|\))$)[^\(\)]*(((?'open'\()[^\(\)]*)+((?'-open'\))[^\(\)]*)+)*(?(open)(?!))$
没考虑空格的情况,因为考虑空格需要加很多很多个\s*,大大降低可读性
由于使用了平衡组,此正则表达式需要在.NET环境下运行
再问: 跪了,我还想问最后一个问题,java可以用这个么?
再答: java 1.5以前貌似是不支持的,之后不是很清楚,你可以试试。