PHP正则表达式在dot之前删除prepend内容

时间:2013-03-17 17:57:57

标签: php regex preg-replace

我在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 个答案:

答案 0 :(得分: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;
}