Regexp包含字符串而不包含另一个字符串

时间:2015-09-04 11:43:37

标签: regex

我在使用regexp过滤时遇到了一些问题。

我有一个包含多个条目的日志,如:

2015-09-04 03:35:05,074  ERROR [repo.sync.SyncTrackerComponent] Unable to pull 
 2015-09-04 03:35:05,074  WARN  [repo.sync.SyncTrackerComponent]  missing event: CREATE

2015-09-04 11:21:58,638 ERROR [repo.jscript.ScriptLogger] Cost center review Id 473805 2015-09-04 14:02:16,917 ERROR [repo.jscript.ScriptLogger] Tarea actual - GBS Review

2015-09-04.*ERROR

我在记事本++中使用常规表达来过滤错误(即今天的错误)2015-09-04 03:35:05,074 ERROR [repo.sync.SyncTrackerComponent] Unable to pull 2015-09-04 11:21:58,638 ERROR [repo.jscript.ScriptLogger] Cost center review Id 473805 2015-09-04 14:02:16,917 ERROR [repo.jscript.ScriptLogger] Tarea actual - GBS Review 会输出错误

2015-09-04.*ERROR.*(?!.*Unable to pull)

我想过滤掉例如不包含某些描述的错误。我试图使用2015-09-04 11:21:58,638 ERROR [repo.jscript.ScriptLogger] Cost center review Id 473805 2015-09-04 14:02:16,917 ERROR [repo.jscript.ScriptLogger] Tarea actual - GBS Review 愿意拥有此输出:

\

但它不起作用。否定查询有什么问题?

1 个答案:

答案 0 :(得分:0)

问题(@stribizhev在评论中暗示)是您在.*之后匹配ERROR,这意味着它与您的否定前瞻能够(不)匹配任何内容之前的所有内容相匹配。

2015-09-04.*ERROR.*(?!.*Unable to pull)
                /|\
                 |
               problem

如果你在比赛的其余部分之前放置负面预测,它应该有效。

2015-09-04.*ERROR(?!.*Unable to pull).*

See Demo