Eclipse RegEx搜索多个单词,忽略注释

时间:2012-03-05 14:28:50

标签: regex eclipse

我尝试使用Eclipse的RegEx搜索功能搜索单词'foo'或'bar',忽略评论。

这是我到目前为止所得到的:

^(?!\s*(//|\*)).*(foo|bar)

我的解决方案的评论限制对我来说是好的(无论如何,如果有人在没有显着扩展正则表达式的情况下有更好的解决方案,我会很高兴听到它):

  • 单行注释必须从行的开头开始,可能是缩进的(所以我不在乎return null; // foo不会被忽略)。
  • 多行注释从行的开头开始,带有一个星号,可能是indended(因此/* foo不会被忽略,而bar \n * foo将被忽略,即使它不是真的评论)。

我的问题是,现在搜索结果中突出显示(包括)'foo'或'bar'的整行。我只想要'foo'或'bar'(或两者,如果两者都出现在同一行中)要突出显示。 为了达到这个目的,我尝试包括一个积极的预测(在几个变体中):

^(?!\s*(//|\*))(?=.*)(foo|bar)

这导致没有结果。我不明白为什么。谢谢你的提示!

1 个答案:

答案 0 :(得分:2)

问题是外观断言实际上并不匹配并使用任何文本。所以在正则表达式

^(?!\s*(//|\*))(?=.*)(foo|bar)

文本foobar只能在行的开头匹配,因为匹配所有前瞻后正则表达式引擎尚未移动。

这意味着如果您不希望匹配前导foo / bar的文本,则需要查看*后面*断言。但是,只有.NET和JGSoft正则表达式引擎支持无限量词,如lookbehind断言中的星号。 Java / Eclipse不支持此功能。

在.NET中,您可以搜索

(?<!^\s*(//|\*).*)(foo|bar)