在 Eclipse 中使用 Grep Console 查找子字符串的正则表达式

标签 regex eclipse

我在 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/

相关文章:

regex - 在 Perl 替换中使用包含文字转义的字符串变量

regex - R 中基于正则表达式的列表匹配

java - Eclipse 错误“文档中跟随根元素的标记必须格式正确

java - 添加一个导出向导到 eclipse RCP 独立应用程序

javascript - 逗号分隔符多维数组

regex - 如何使用某些功能将列拆分为多列?

Java 正则表达式为每个对象分割 JSON 字符串

html - libgdx HTML5 部署

java - 更改与整数对应的输出文件的名称

java - 扩展 JUnit 4.11 : Unrooted Tests