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

不包括mysql.log中的子模式的正则表达式,mysql,regex,Mysql,Regex,我正在寻找从本地mysql.log文件恢复要对生产服务器执行的更改,我已经通过以下方式获得了更改: ^.*(ALTER TABLE).*(ADD|DROP|CHANGE|^AUTO_INCREMENT).*$ 。。我还将捕获createtable语句,排除showcreatetable和createtable(如果不存在)。因此,我首先试图避免节目,但我并没有用我头脑中更直观的方式成功: ^.*(^SHOW)*(CREATE TABLE).*$ ^.*(^SHOW CREATE TABLE|

我正在寻找从本地mysql.log文件恢复要对生产服务器执行的更改,我已经通过以下方式获得了更改:

^.*(ALTER TABLE).*(ADD|DROP|CHANGE|^AUTO_INCREMENT).*$
。。我还将捕获
createtable
语句,排除
showcreatetable
createtable(如果不存在)
。因此,我首先试图避免
节目
,但我并没有用我头脑中更直观的方式成功:

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

^.*(^SHOW CREATE TABLE|CREATE TABLE).*$
感谢您的帮助


Carmine Iaciofano

看起来很消极,正面和反面都可以用来解决你的问题。在这种情况下,下面的正则表达式应该起作用

(?<!SHOW )(CREATE TABLE)(?! IF)
(?
在这种情况下,它会查找“createtable”的任何实例,这些实例前面没有“SHOW”或后面没有“IF”。请注意组中的空格

然后您可以使用

^.*(?<!SHOW )(CREATE TABLE)(?! IF).*
^.*?
与整条线路相匹配


你可以阅读look aheads和look behinds。

如果我假设egrep?支持消极查找断言,请查看消极查找断言。太好了!它很有效。我在很多方面尝试过消极查找,但我错过了“SHOW”后的空白。我会关注你所附的链接并进行研究。谢谢!