2014-10-03 62 views
2

我试图将数学表达式分解成几块,我试图用正则表达式/\([^)]+\)/来做诡计(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) 
) 

感谢。

+2

您的预期产出是? – 2014-10-03 15:41:29

+0

@AvinashRaj我发誓我看到你在每个正则表达式相关的问题,哈哈 – 2014-10-03 15:41:50

+0

我在主要文本添加预期的输出。 – 2014-10-03 15:45:02

回答

6

要匹配嵌套括号一个recursive尝试可能是:

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

(?R)的模式是从开始粘贴。相同像(?0)

请参阅example at regex101; Regex FAQ

+0

它完美的工作,可悲的是我觉得很难理解。 – 2014-10-03 15:55:14

+0

@MarcoAurélioDeleu可能希望看到我从[rexegg](http://www.rexegg.com/regex-recursion.html)或[regular-expressions.info](http://www.regular -expressions.info/recurse.html)也有一个很好的教程:) – 2014-10-03 16:01:37

相关问题