例如我有一个声明:
$var = '2*2-3+8'; //variable type is string
如何使它平等9
?
答案 0 :(得分:7)
来自this page,一个非常棒的(简单的)计算验证正则表达式,由Richard van Velzen编写。一旦你拥有它,并且匹配,你可以放心,你可以在字符串上使用eval。在使用eval之前,请务必确保输入已经过验证!
<?php
$regex = '{
\A # the absolute beginning of the string
\h* # optional horizontal whitespace
( # start of group 1 (this is called recursively)
(?:
\( # literal (
\h*
[-+]? # optionally prefixed by + or -
\h*
# A number
(?: \d* \. \d+ | \d+ \. \d* | \d+) (?: [eE] [+-]? \d+ )?
(?:
\h*
[-+*/] # an operator
\h*
(?1) # recursive call to the first pattern.
)?
\h*
\) # closing )
| # or: just one number
\h*
[-+]?
\h*
(?: \d* \. \d+ | \d+ \. \d* | \d+) (?: [eE] [+-]? \d+ )?
)
# and the rest, of course.
(?:
\h*
[-+*/]
\h*
(?1)
)?
)
\h*
\z # the absolute ending of the string.
}x';
$var = '2*2-3+8';
if( 0 !== preg_match( $regex, $var ) ) {
$answer = eval( 'return ' . $var . ';' );
echo $answer;
}
else {
echo "Invalid calculation.";
}
答案 1 :(得分:1)
您需要做的是找到或编写一个可以正确读取方程式并实际计算结果的解析器函数。在许多语言中,这可以通过使用Stack来实现,你应该看看像postfix和infix解析器之类的东西。
希望这有帮助。
答案 2 :(得分:0)
$string_with_expression = '2+2';
eval('$eval_result = ' . $string_with_expression)`;
$ eval_result - 就是你所需要的。
答案 3 :(得分:-1)