我在 Eclipse 中使用 Grep Console 来突出显示控制台输出中包含字符的行,例如取消
,基于正则表达式。这些字符可以在其前面和/或后面有一个符号,可以被空格包围,或者可以是子字符串。换句话说,我想匹配以下几行(无论大小写):
The flight was cancelled.
[Cancelled] Flight 101
Are they going to cancel it?
我需要使用什么正则表达式来突出显示这些行?
最佳答案
正如 acdcjunior 已经解释的那样,您基本上只需要一个不区分大小写的正则表达式来匹配“cancel”。
如果控制台中已有输出,创建此表达式的最简单方法是在输出中选择“取消”一词,然后右键单击并从上下文菜单中选择“添加表达式”。您可以通过子菜单选择要向其中添加新表达式的组,或者创建一个新表达式。然后将使用以下表达式创建表达式项:
(\Qcancel\E)
请务必取消选中“区分大小写”复选框,该复选框出于性能原因默认启用,并且会阻止表达式将第二行与大写“C”匹配。
这与 acdcjunior 提供的表达式基本相同,但有一些差异:
不包括表达式开头和结尾的 .*
匹配器,因为它们不是必需的。表达式将始终匹配行中任意位置的子字符串,除非使用 $
或 ^
匹配器来专门引用行的开头或结尾。
该表达式还包含在括号中以创建捕获组,使您不仅可以为包含字符串 cancel
的整行分配样式,还可以为该字符串本身分配样式。如果您不想设置该字符串的样式,可以省略括号。
\Q
和 \E
,以确保选定字符串中的任何字符都不会被解释为特殊表达式字符。在本例中,这不是必需的,因为 cancel
仅包含单词字符。
这意味着在您的情况下,最简单的充分表达就是:
cancel
如果您按照 acdcjunior 的建议将其用作“快速表达式”,则该表达式也可以工作,尽管实际上并不需要这样做。快速表达式背后的想法是,控制台中很长的行会大大减慢模式匹配速度。因此,Grep Console 对每行中与配置的表达式匹配的字符数有一个可配置的限制。长行中此限制之后的任何字符都将被忽略,这意味着仅在该限制之后包含关键字的行将不会被识别,因此不会设置样式。
如果配置快速表达式,则每一行都会首先与该表达式匹配,只有匹配正确时才会使用“正常”表达式。在这种情况下,表达式将与整行进行匹配。因此,快速表达式应该尽可能简单,以免匹配速度过慢。
在您的情况下,使用 cancel
作为快速表达式并将普通表达式留空是可行的,因为首先快速表达式与您的行正向匹配,然后空白表达式也匹配。如果您的行很长,则可能会降低一些性能,因为快速表达式将忽略上面解释的长度限制。此外,快速表达式不使用捕获组,因此在这种情况下您无法使用单独的样式突出显示 cancel
字符串。
关于在 Eclipse 中使用 Grep Console 查找子字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17242738/