正则表达式查找内容不在引号中

Rag*_*azs 6 php regex

我试图在引号外找到参数(单ou Double)

$sql = "
INSERT INTO Notifify (to_email, msg, date_log, from_email, ip_from)
VALUES
    (
        :to_email,
        'test teste nonono',
        '2013-02-01 10:48:27',
        'bar@foo',
        :ip_from
    )
 ";

  $matches = array();
  preg_match_all('/:[A-Za-z0-9_]*/', $sql, $matches);
Run Code Online (Sandbox Code Playgroud)

上面的代码将产生以下结果,

print_r($matches); // array(:to_email, :48, :27, :ip_from)

我只想要:

:to_email
:ip_from
Run Code Online (Sandbox Code Playgroud)

Lou*_*cci 3

'/^\\s*:[A-Za-z0-9_]*/m'
Run Code Online (Sandbox Code Playgroud)

应该做到这一点,检查行首和空格,并确保 RegEx 查询设置为多行。

编辑

preg_match_all('/(?:^\\s*)(:[A-Za-z0-9_]+)/m', $sql, $matches);
print_r($matches[1]);
Run Code Online (Sandbox Code Playgroud)

这使用被动非捕获组 (?:),它将正确的结果放入索引 1 处的 matches 变量的子数组中,而无需空格填充。