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

Regex 正则表达式匹配数字和数学运算符,regex,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}"+"\\))"); 这个怎

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

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}"+"\\))");

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

如果您希望不止一次出现cos/sin/tan,您还可以使用更复杂的方法

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

虽然使用后一个表达式,但如果它发生在以cos/sin/tan表达式结尾的字符串之后,则需要至少出现2次,以考虑可能的结束“)”。

sin/cos/pi不是数字或运算符。。。即使有一个有效符号的白名单,正则表达式也不可能是做任何事情的正确选择(您没有共享)
*
将匹配所有这些。@AlexK。我已经用我的代码更新了帖子
((?:(?:[-\d)(+/*]+)?(?:(?:cos|sin|tan)[(](?:\d+?|Pi)[)])?){1,3})