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

时间:2014-10-03 15:39:59

标签: php regex

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

(2*x^2 + 5*x - (2*x - 3)^(1/2))/(1 + x)
^                      ^      ^
START                IGNORE FINISH

由于我对提出正则表达式不太满意,我想知道我是否应该使用strpossubstrstr_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)
)

感谢。

1 个答案:

答案 0 :(得分:6)

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

\((?:[^)(]|(?R))*\)

(?R)处,模式从开始粘贴。与(?0)

相同

example at regex101; Regex FAQ