正则表达式,不包括mysql.log中的子模式

时间:2013-07-28 08:55:09

标签: mysql regex

我正在寻找从我的本地mysql.log文件中恢复对生产服务器执行的更改,并且我已经使用以下命令进行了更改:

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

..我还会抓住CREATE TABLE语句,不包括SHOW CREATE TABLECREATE TABLE IF NOT EXISTS。所以我试图首先避免使用SHOW,但我并没有成功地使用更直观的方式:

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

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

感谢任何帮助,

Carmine Iaciofano

1 个答案:

答案 0 :(得分:2)

似乎是负面的前瞻和后方可以用来解决你的问题。在这种情况下,以下正则表达式应该可以完成。

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

在这种情况下,它会找到“CREATE TABLE”的任何实例,其前面没有“SHOW”或后面跟着“IF”。注意组中的空格。

然后您可以使用

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

匹配整条线。

您可以阅读前瞻并了解here