2016-08-05 485 views
1

我已經將一個站點遷移到一個新的服務器,我已經確認PHP版本和擴展一樣(5.3)。Preg_Match_All:編譯失敗

我有一個問題與preg_match_all。我得到的錯誤是:

preg_match_all()[function.preg-全匹配]: 編譯失敗:?(R或([+ - ]數字必須後跟)在 偏移22

這條線路是:

if (preg_match_all('/([^{]++)({([^{}]++|(?R2))*})/', $code, $items, PREG_SET_ORDER)) { // split declarations 

這是一個隨機的插件,沒有支持,只是想知道,如果它實際上是缺少一個)。

由於某些原因,此代碼仍然在原始服務器上工作。

回答

0

最好把你想要在其上運行函數的字符串樣本。

但是,錯誤是因爲'?'是正則表達式中的一個運算符。你應該逃避它。通過反斜槓

if (preg_match_all('/([^{]++)({([^{}]++|(\?R2))*})/', $code, $items, PREG_SET_ORDER)) { // split declarations