2015-10-25 94 views
0

我想從查詢字符串中的to_date函數的開頭和結尾刪除單引號(')。PHP preg_replace不替換模式

$query = "'to_date('20-Jan-1970 4:00 AM','DD-MON-YYYY HH:MI AM')'"; 

以下模式查找字符串,但並不代替它:

$query = preg_replace("/(['])(to_date[(].*[)])(['])/i", "${2}", $query); 

$查詢必須更改爲值:

to_date('20-Jan-1970 4:00 AM','DD-MON-YYYY HH:MI AM') 

電流輸出:

Empty String "" 
+1

刪除替換字符串中的大括號。順便說一句,您不需要在字符類中放置單引號,它們不是特殊字符,也不需要將它們放在捕獲組中用於您的任務。 –

回答

1

嗯,它的確如此,但是你在使用雙引號字符串替換參數時犯了一個常見的錯誤。您必須記住,雙引號字符串會導致字符串插值,並且您在那裏有${2},PHP會在它將參數值發送到preg_replace之前試圖尋找名爲$2的變量。 Turning up error_reporting would reveal this upon inspecting your error logs

只需將preg_replace("/(['])(to_date[(].*[)])(['])/i", "${2}", $query);替換爲​​,一切正常,或者您可以選擇使用更有利的\\2進行替換,這正是我所要做的。

另外請注意,你真的甚至不需要這個技術上的正則表達式。你可以使用substr($query, 1, -1);都一樣。

+0

我用$ 2替換了$ {2},它工作正常。謝謝。 –

+1

substr在這種情況下不能使用,因爲所討論的STRING實際上是更大的DB查詢字符串的一部分。 –

-2
$query=substr(substr($query,1),0,-1);