我试图将数学表达式分解为碎片,我试图使用正则表达式/\([^)]+\)/来完成这个技巧(在这里找到).但是阅读这个答案,我明白这个正则表达式会搜索第一个右括号)来完成,在处理时给我带来麻烦,例如:
(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)
谢谢.
要匹配嵌套的括号,递归尝试可能是:
\((?:[^)(]|(?R))*\)
Run Code Online (Sandbox Code Playgroud)
在(?R)模式从开始粘贴.相似(?0)
参见regex101的例子 ; 正则表达式常见问题