2 wq6527899 wq6527899 于 2016.03.12 07:36 提问

请教关于正则表达式问题

我想写一个正则匹配这些表达式:
5+5=
5.03+5.26=
(-4.5)+(-8.3)=
0+0=
其中+号可以是+、-、*、/任意一个,也就是说满足正常四则运算表达式,我写了一个正则:^(\(-(\d*+\.\d*)\)|\d*+\.\d*|0)+-+/*|\(-(\d*+\.\d*)\)|0)=$ 但是不行啊,,大神指点一下吧,,有急用,,万分感谢了。

有知道的吗???真心请教!!急急急~~~

3个回答

fateflv
fateflv   2016.03.12 12:33
已采纳

正则:

 ^(([0-9]*[.]?[0-9]+)|\(-[0-9]*[.]?[0-9]+\))[*/+-]((\(-[0-9]*[.]?[0-9]+\))|([0-9]*[.]?[0-9]+))=$

解析:
图片说明

示例:
图片说明

这样应该能满足你的需求了吧?不行的话你要自己动动脑了,我不知道你还想要实现成什么样的。

fateflv
fateflv 回复wq6527899: 回复fateflv: 这个也不是最严格的,忘了0不能作除数的情况。将就着吧~~,要改的话,只能更麻烦了。
接近 2 年之前 回复
fateflv
fateflv 回复wq6527899: 原来那条正则也不是很严格的,它能配置到 .0 或 1. 之类的式子,但这应该是不正确的,用这条正则应该是最严格的了 ^((([1-9][0-9]*|0)(|[.][0-9]+))|\(-([1-9][0-9]*|0)(|[.][0-9]+)\))[*/+-]((([1-9][0-9]*|0)(|[.][0-9]+))|\(-([1-9][0-9]*|0)(|[.][0-9]+)\))=$
接近 2 年之前 回复
wq6527899
wq6527899 谢谢,,非常感谢!!
接近 2 年之前 回复
fateflv
fateflv   2016.03.12 09:23

正则
/[0-9].*([+-]|[*/])[0-9].*=/g

图片说明

fateflv
fateflv 回复wq6527899: 你要写得非常具体的话就复杂点了,像你又要求有负数,你可以改一下正则,如有负数的时候要求+-*/几个运算符号两边必须要有左括号或右括号。且除了运算符号外都是数字。如果你看得明白我的正则的话,它也能匹配8.52abc+3.14=这样的式子,因为.代表任意字符,*表示可出现0次或多次。我写的那个正则表达式并非严格匹配的,要严格匹配的话还得改才行。
接近 2 年之前 回复
wq6527899
wq6527899 回复fateflv: 我试了,,不行啊,,输入任何情况都会匹配,,比如输入5+-5=也匹配,,输(-5)))+5=也匹配啊!!
接近 2 年之前 回复
fateflv
fateflv 更正一下右边的括号 [(]?[-]?[0-9].*[*/+-][-]?[)]?[0-9].*=
接近 2 年之前 回复
fateflv
fateflv 这是加上可能有负号和括号的 [(]?[-]?[0-9].*([+-]|[*/])[(]?[-]?[0-9].*=
接近 2 年之前 回复
fateflv
fateflv 正则主体为【[0-9].*([+-]|[*/])[0-9].*=】后面的g表示全局
接近 2 年之前 回复
showbo
showbo   Ds   Rxr 2016.03.12 11:01

这种编译原理来实现,一个正则你想搞定就不用编译原来这门课程了

wq6527899
wq6527899 我只想写出一个表达式,,与正则进行匹配,,,看看它是否满足格式要求而已!!
接近 2 年之前 回复
wq6527899
wq6527899 用编译原理怎么实现啊,,请指教一下,,万分感谢!!
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片