2

I am using Grep Console in Eclipse to highlight lines in the console output that contain characters, e.g. cancel, based on a regex. The characters may have a symbol preceding and/or following it, may be surrounded by spaces, or may be substrings. In other words, I want to match the following lines (regardless of case):

 The flight was cancelled.
 [Cancelled] Flight 101
 Are they going to cancel it?

What is the regex that I need to use to highlight these lines?

4

2 回答 2

2

正如 acdcjunior 已经解释的那样,您基本上只需要一个不区分大小写的正则表达式来匹配“取消”。

如果您已经在控制台中有输出,创建此表达式的最简单方法是在输出中选择“取消”一词,然后右键单击并从上下文菜单中选择“添加表达式”。您将在子菜单中选择要添加新表达式的组,或创建一个新表达式。然后将使用以下表达式创建表达式项:

(\Qcancel\E)

请务必取消选中“区分大小写”复选框,该复选框出于性能原因默认启用,并且会阻止表达式将您的第二行与大写“C”匹配。

这与 acdcjunior 提供的表达式基本相同,但有一些不同:

不包括表达式开头和结尾的.*匹配器,因为它们不是必需的。表达式将始终匹配行中任何位置的子字符串,除非$or^匹配器用于专门引用行的开头或结尾。

该表达式还包含在括号中以创建一个捕获组,允许您不仅为包含 string 的整行指定样式cancel,还可以为该字符串本身指定样式。如果您不想设置该字符串的样式,可以省略括号。

\Q并且\E在从选定的文本字符串创建表达式时始终包括在内,以确保选定字符串中的任何字符都不会被解释为特殊的表达式字符。在这种情况下,这没有必要,因为cancel只包含单词字符。

这意味着在您的情况下,最简单的充分表达就是:

cancel

如果您按照 acdcjunior 的建议将其用作“快速表达式”,则该表达式也可以使用,尽管实际上并没有必要这样做。快速表达式背后的想法是,控制台中很长的行会大大减慢模式匹配的速度。因此,Grep 控制台对每行中将与配置的表达式匹配的字符数有一个可配置的限制。长行中此限制之后的任何字符都将被忽略,这意味着仅在限制之后包含关键字的行将不会被识别,因此不会被设置样式。

如果你配置了一个快速表达式,每一行都会首先匹配这个表达式,只有当匹配为正时才会使用“正常”表达式。在这种情况下,表达式与整行匹配。因此,快速表达应该尽可能简单,以免过度减慢匹配速度。

在您的情况下,cancel用作快速表达式并将普通表达式留空是可行的,因为首先快速表达式与您的行正匹配,然后空白表达式也匹配。如果你有很长的行,它可能会花费你一些性能,因为快速表达式将忽略上面解释的长度限制。此外,快速表达式不使用捕获组,因此cancel在这种情况下您不能使用单独的样式突出显示字符串。

于 2013-06-23T22:30:08.950 回答
0

利用:

.*(\Qcancel\E).*

并且不要选中“区分大小写”。

或者只是cancel在“快速表达”文本框中。

于 2013-06-21T19:43:52.957 回答