如何使用正则表达式判断用户输入的公式是否合法.允许四则混合运算和多重括号.
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间: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以前貌似是不支持的,之后不是很清楚,你可以试试。
!.*[^\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以前貌似是不支持的,之后不是很清楚,你可以试试。
判断:分数四则混合运算顺序和整数四则混合运算顺序不完全相同.
js 用正则表达式验证只允许输入数字,或者是数字后两位小数点,如何写?
速求一个c++四则混合表达式运算的程序
判断:分数四则混合运算的意义与整数四则混合运算的意义相同.
四则混合运算中的去括号的定义
求正则表达式 对密码进行验证 要求输入字母和数值的混合编码,长度最少12位
C语言求编程,1000以内自然数表示为五个3的正整数幂的四则混合运算式.允许括号嵌套.
js 求英语和数字混合的正则表达式
如何让正则表达式 不匹配括号内的内容
判断非负数(整数和小数)的正则表达式如何写?在js中如何用?
四则混合运算的顺序,
四年级的四则混合运算