正则表达式没有正确捕获

时间:2014-04-25 20:46:21

标签: php regex

这是一个我只想构建参数数组的查询:

$subject = "SELECT * FROM a_table WHERE something='col1=:param1' AND col2=:param2 OR col3=:param3"; 

我试过了:

$pattern = "^([\"'])(?:(?=(\\\\?))\\2.)*?\\1^"; 
$subject = preg_replace($pattern, "", $subject); 

$pattern = '#[:][a-zA-Z0-9_]+#'; 
preg_match_all($pattern, $subject, $matches); 
print_r($matches);

不幸的是,我只获得param2param3作为输出

我希望我的转储看起来像这样:

Array ( [0] => :param1 [1] => :param2 [2] => :param3 )

1 个答案:

答案 0 :(得分:2)

您只需使用此正则表达式=(:\w+)

即可
$query = "SELECT * FROM a_table WHERE something='col1=:param1' AND col2=:param2 OR col3=:param3";

preg_match_all('/=(:\w+)/', $query, $params, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($params[1]); $i++) {

    echo $params[1][$i]."\n";
}

<强> 样本 http://ideone.com/aut6q2