2013-03-17 39 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