gpt4 book ai didi

php - 是否可以检查数学表达式字符串?

转载 作者:行者123 更新时间:2023-12-04 05:12:53 25 4
gpt4 key购买 nike

我想检查所有括号是否正确开始和关闭,并检查它是否在给定字符串中是数学表达式。

例如:
$str1 = "(A1+A2*A3)+A5+(B3^B5)*(C1*((A3/C2)+(B2+C1)))"$str2 = "(A1+A2*A3)+A5)*C1+(B3^B5*(C1*((A3/C2)+(B2+C1)))"$str3 = "(A1+A2*A3)+A5++(B2+C1)))"$str4 = "(A1+A2*A3)+A5+(B3^B5)*(C1*(A3/C2)+(B2+C1))"
在上面的例子中 $str1$str4是有效的字符串....

请帮助....

最佳答案

你需要一种解析器。我认为您无法通过正则表达式处理此问题,因为您必须检查括号的数量和顺序以及可能的嵌套括号。下面的这个类是一个 Python based Math expression syntax validator of parentheses 的快速 PHP 端口我发现:

class MathExpression {

private static $parentheses_open = array('(', '{', '[');
private static $parentheses_close = array(')', '}', ']');

protected static function getParenthesesType( $c ) {
if(in_array($c,MathExpression::$parentheses_open)) {
return array_search($c, MathExpression::$parentheses_open);
} elseif(in_array($c,MathExpression::$parentheses_close)) {
return array_search($c, MathExpression::$parentheses_close);
} else {
return false;
}
}

public static function validate( $expression ) {
$size = strlen( $expression );
$tmp = array();
for ($i=0; $i<$size; $i++) {
if(in_array($expression[$i],MathExpression::$parentheses_open)) {
$tmp[] = $expression[$i];
} elseif(in_array($expression[$i],MathExpression::$parentheses_close)) {
if (count($tmp) == 0 ) {
return false;
}
if(MathExpression::getParenthesesType(array_pop($tmp))
!= MathExpression::getParenthesesType($expression[$i])) {
return false;
}
}
}
if (count($tmp) == 0 ) {
return true;
} else {
return false;
}
}
}

//Mathematical expressions to validate
$tests = array(
'(A1+A2*A3)+A5+(B3^B5)*(C1*((A3/C2)+(B2+C1)))',
'(A1+A2*A3)+A5)*C1+(B3^B5*(C1*((A3/C2)+(B2+C1)))',
'(A1+A2*A3)+A5++(B2+C1)))',
'(A1+A2*A3)+A5+(B3^B5)*(C1*(A3/C2)+(B2+C1))'
);

// running the tests...
foreach($tests as $test) {
$isValid = MathExpression::validate( $test );
echo 'test of: '. $test .'<br>';
var_dump($isValid);
}

关于php - 是否可以检查数学表达式字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14661185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com