用于分解多项式表达式的正则表达式

Mar*_*leu 2 php regex

我试图将数学表达式分解为碎片,我试图使用正则表达式/\([^)]+\)/来完成这个技巧(在这里找到).但是阅读这个答案,我明白这个正则表达式会搜索第一个右括号)来完成,在处理时给我带来麻烦,例如:

(2*x^2 + 5*x - (2*x - 3)^(1/2))/(1 + x)
^                      ^      ^
START                IGNORE FINISH
Run Code Online (Sandbox Code Playgroud)

因为我不是想出正则表达式真的很好,我知道如果我要处理这个用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)
)
Run Code Online (Sandbox Code Playgroud)

谢谢.

Jon*_*y 5 6

要匹配嵌套的括号,递归尝试可能是:

\((?:[^)(]|(?R))*\)
Run Code Online (Sandbox Code Playgroud)

(?R)模式从开始粘贴.相似(?0)

参见regex101的例子 ; 正则表达式常见问题