我正在尝试将数学表达式分解为碎片,我试图使用正则表达式/\([^)]+\)/
来完成这一操作(found here)。但是阅读这个答案,我明白这个正则表达式会搜索第一个右括号)来完成,在处理时给我带来麻烦,例如:
(2*x^2 + 5*x - (2*x - 3)^(1/2))/(1 + x)
^ ^ ^
START IGNORE FINISH
由于我对提出正则表达式不太满意,我想知道我是否应该使用strpos
,substr
和str_replace
处理此问题,或者是否有不同的正则表达式适用于preg_match_all并获得正确的括号组?
注意:此函数将是递归的,以便求解内括号。
编辑:
在这种情况下我的预期输出:
$array = null;
$expression = '(2*x^2 + 5*x - (2*x - 3)^(1/2))/(1 + x)';
$expression = str_replace(' ', '', $expression);
preg_match_all('MAGIC EXPRESSION HERE', , $array);
print_r($array);
// Output
array(
[0] => (2*x^2+5*x-(2*x-3)^(1/2))
[1] => (1+x)
)
感谢。