2014-10-03 116 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