Configuration 如何从确认结果中排除注释?

Configuration 如何从确认结果中排除注释?,configuration,comments,ack,Configuration,Comments,Ack,嗨,我是新来的ack(实际上是半小时前开始的)。我对搜索结果的质量印象深刻 但是在我的源文件中有很多注释,如果我搜索一个类/函数名,我会得到大约20个带有注释行的结果,2个带有实际代码 有没有一种方法可以排除/和#之后或/***/之间的文本?您可以这样跳过单行注释 # ignore matches after // ack '^[^//]*word' # ignore matches after # ack '^[^#]*word' 如果您使用的是ag,请记住它会进行多行匹配: # ignor

嗨,我是新来的
ack
(实际上是半小时前开始的)。我对搜索结果的质量印象深刻

但是在我的源文件中有很多注释,如果我搜索一个类/函数名,我会得到大约20个带有注释行的结果,2个带有实际代码


有没有一种方法可以排除
/
#
之后或
/***/
之间的文本?

您可以这样跳过单行注释

# ignore matches after //
ack '^[^//]*word'
# ignore matches after #
ack '^[^#]*word'
如果您使用的是
ag
,请记住它会进行多行匹配:

# ignore matches after //
ag '^[^\n\r//]*word'
# ignore matches after #
ag '^[^\n\r#]*word'

你没有。相反,您可以标记源


跳过注释将意味着动态解析输入,这通常是缓慢的。此外,每种编程语言都有不同的注释语法,这使得实现这种注释非常重要。虽然您可以使用自己的正则表达式(例如,对于C,请使用以下内容:
\/\*(\*(?!\/)\[^*])*\*/
,但这些模式非常复杂,比ack、ag和grep设计用于快速搜索的模式更麻烦。您真正想要的是一种通过函数和类导航代码的方法;这就是标记代码的目的:查看通用CTAG

你现在找到更多关于这个的信息了吗?也许。。。但是它说不可能,并解释了为什么不可能。为什么需要
[^\r\n]
?ack不是只做单线比赛吗?谢谢。我认为你是对的,编辑。Ack返回单行匹配,但ag返回多行匹配。而且,
[^/]
也不会做您期望的事情。你需要一个更复杂的匹配器。