2013-03-17 119 views
0

前取出預先準備內容我在PHP中包含的東西像這樣的數組字符串:PHP正則表達式點

$a = array(
    array('inner' => 'N.person = P.id'), 
    array('inner' => 'L.person = P.id'), 
    array('left' => 'A.person = P.id AND A.excluded IS NULL') 
); 

而且我想告訴主鍵P.id和造成這樣的SQL刪除所有別名:

$x = someFunctionThatSanitizeSQL('P.id', $a); 

$x結果的print_r:

array(
    array('inner' => 'person = :pk'), 
    array('inner' => 'person = :pk'), 
    array('left' => 'person = :pk AND excluded IS NULL') 
); 

預先感謝

@edit:錯過任何一個錯字

回答

1

str_replace($pkreplace, ':pk', $mystring);之後,我認爲你正在尋找的正則表達式是這樣的:

/(?=(^|\w))[A-Z0-9_-]+\./ 

例如,清理出各串,你可以做

preg_replace('/(?=(^|\w))[A-Z0-9_-]+\./i', '', $mystring); 

但是,如果要刪除的A.L.等,有可能是其他問題您的查詢由於值不再位於數據庫表下,並可能導致模糊的值錯誤。你確定這是你想要查詢的行爲嗎?

編輯

你的函數的最終實施將看起來像(假設你需要數組):

function someFunctionThatSanitizeSQL($pkreplace, $dataarray) { 
    if (!is_array($dataarray)) 
    return null; 
    $retval = array(); 
    foreach ($dataarray as $key => & $curentry) { 
    $curstring = str_replace($pkreplace, ':pk', $curentry); 
    $curstring = preg_replace('/(?=(^|\w))[A-Z0-9_-]+\./i', '', $curstring); 
    $retval[$key] = $curstring; 
    } 
    return $retval; 
} 
+0

是的,我敢肯定,有關此問題的!因爲每個查詢都將在您的範圍內隔離。我將執行你的正則表達式。謝謝 – 2013-03-17 18:09:49

+0

謝謝!你的正則表達式就像一副手套 – 2013-03-17 18:16:32