6

引用符の外のパラメーターを見つけようとしています(Single 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);

上記のコードは次の結果を生成します、

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

そして私はただ欲しい:

:to_email
:ip_from
4

3 に答える 3

3
'/^\\s*:[A-Za-z0-9_]*/m'

行頭と空白をチェックし、正規表現クエリが複数行に設定されていることを確認して、トリックを行う必要があります。

編集

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

これは、インデックス 1 の match 変数のサブ配列にスペースを埋め込むことなく、適切な結果を配置するパッシブな非キャプチャ グループ (?:) を使用します。

于 2013-02-01T13:44:35.267 に答える
2

ネガティブルックビハインドを使用できます。このようにして、必要なものと正確に一致します。

preg_match_all('/(?<!\w):[a-z0-9_]+/', $sql, $matches);

デモ

于 2013-02-01T13:54:50.350 に答える
1

これはどうですか:

/\s+:[A-Za-z0-9_]*/

それほど厳密ではなく、テニスのスコア(15 : 30)などのより複雑な例では失敗する可能性がありますが、おそらくニーズには十分です。

于 2013-02-01T13:55:18.910 に答える