我尝试使用Eclipse的RegEx搜索功能搜索单词'foo'或'bar',忽略评论。
这是我到目前为止所得到的:
^(?!\s*(//|\*)).*(foo|bar)
我的解决方案的评论限制对我来说是好的(无论如何,如果有人在没有显着扩展正则表达式的情况下有更好的解决方案,我会很高兴听到它):
return null; // foo
不会被忽略)。/* foo
不会被忽略,而bar \n * foo
将被忽略,即使它不是真的评论)。我的问题是,现在搜索结果中突出显示(包括)'foo'或'bar'的整行。我只想要'foo'或'bar'(或两者,如果两者都出现在同一行中)要突出显示。 为了达到这个目的,我尝试包括一个积极的预测(在几个变体中):
^(?!\s*(//|\*))(?=.*)(foo|bar)
这导致没有结果。我不明白为什么。谢谢你的提示!
答案 0 :(得分:2)
问题是外观断言实际上并不匹配并使用任何文本。所以在正则表达式
^(?!\s*(//|\*))(?=.*)(foo|bar)
文本foo
或bar
只能在行的开头匹配,因为匹配所有前瞻后正则表达式引擎尚未移动。
这意味着如果您不希望匹配前导foo
/ bar
的文本,则需要查看*后面*断言。但是,只有.NET和JGSoft正则表达式引擎支持无限量词,如lookbehind断言中的星号。 Java / Eclipse不支持此功能。
在.NET中,您可以搜索
(?<!^\s*(//|\*).*)(foo|bar)