1

ローカルの mysql.log ファイルから、実稼働サーバーに対して実行する変更を回復しようとしていますが、次を使用して変更を既に取得しています。

^.*(ALTER TABLE).*(ADD|DROP|CHANGE|^AUTO_INCREMENT).*$

.. そして、 andをCREATE TABLE除くステートメントもキャッチします。だから私は最初に回避しようとしましたが、私の心の中でより直感的な方法を使用して成功していません:SHOW CREATE TABLECREATE TABLE IF NOT EXISTSSHOW

^.*(^SHOW)*(CREATE TABLE).*$

^.*(^SHOW CREATE TABLE|CREATE TABLE).*$

どんな助けでも大歓迎です、

カーマイン・イアシオファノ

4

1 に答える 1

2

問題を解決するために、否定的な先読みと後読みを使用できるようです。この場合、次の正規表現が機能します。

(?<!SHOW )(CREATE TABLE)(?! IF)

この場合、「SHOW」が前になく、「IF」が後にない「CREATE TABLE」のインスタンスが検出されます。グループ内のスペースに注意してください。

その後、使用できます

^.*(?<!SHOW )(CREATE TABLE)(?! IF).*

ライン全体に合わせます。

ここで、先読みと後読みについて読むことができます。

于 2013-07-28T09:48:12.917 に答える