正则表达式匹配数字和数学运算符

时间:2017-01-10 16:20:14

标签: regex

我需要一个与这个表达式匹配的正则表达式:

9+sin(21) 
cos(Pi) 
4+1 
4+5*(2-1) 
6*(3*5*(3*(7*(7-9)-4)-3)-1) 
(120-(2*2*(3*(4-4/4*4)-3)-12/2))*cos(6) 
(-4+1/5*(6+5*2))*9800

正则表达式必须对字母或标点符号进行调整

我的正则表达式不起作用:

"([(-?\\d+](.*))||"+ "((sin|cos|tan)\\("+"[\\d\\D]{1,5}"+"\\))");

1 个答案:

答案 0 :(得分:0)

这个怎么样,它适用于所有你的情况,在perl下,并且不会匹配字母,除了字符串" cos,sin,tan"和Pi。

((?:[-\d)(+/*]+)?(?:(?:cos|sin|tan)[(](?:\d+?|Pi)[)])?(?:[\-\d\)\(\+/*]+)?)

如果你期望有多个cos / sin / tan出现,你也可以选择更复杂的东西。

((?:(?:[-\d)(+/*]+)?(?:(?:cos|sin|tan)[(](?:\d+?|Pi)[)])?){1,3})

虽然使用后者,但是你需要至少2次出现,考虑到可能的关闭")",如果它发生在一个以cos / sin结尾的字符串之后/ tan表达。